Php 将UTF-8数据放入latin1数据库列时会发生什么情况?

Php 将UTF-8数据放入latin1数据库列时会发生什么情况?,php,mysql,utf-8,character-encoding,latin1,Php,Mysql,Utf 8,Character Encoding,Latin1,我得到了一些用UTF-8编码的数据,这些数据将是西班牙语。我需要将其放入的数据库列当前正在使用latin1字符集 如果我将UTF-8数据放入这些列中会发生什么?我会丢失任何正确的数据吗? 或者我应该使用php函数mb\u convert\u encoding转换编码吗?每个可能的字节序列在latin1中都是有效的,因此您可以将UTF-8编码字符串放入您的列中,没有任何问题。当您从数据库中提取数据时,字节将与输入时相同,因此如果客户端知道这些字节是UTF-8编码的,您将返回原始数据 但是,您确实不

我得到了一些用
UTF-8
编码的数据,这些数据将是西班牙语。我需要将其放入的数据库列当前正在使用
latin1
字符集

如果我将UTF-8数据放入这些列中会发生什么?我会丢失任何正确的数据吗?
或者我应该使用php函数
mb\u convert\u encoding
转换编码吗?

每个可能的字节序列在
latin1
中都是有效的,因此您可以将UTF-8编码字符串放入您的列中,没有任何问题。当您从数据库中提取数据时,字节将与输入时相同,因此如果客户端知道这些字节是UTF-8编码的,您将返回原始数据

但是,您确实不应该这样做:为什么不将列数据类型更改为UTF-8呢

ALTER TABLE my_table MODIFY my_column TEXT CHARACTER SET utf8;

你的问题表明你已经知道答案了。“我应该用错误的方法还是正确的方法?”你为什么不试试看呢?谢谢!我想更改列字符集,但害怕弄乱其中的当前数据。但是从您所说的来看,似乎所有数据都可以。@Brett:MySQL将尝试将列中的现有数据转换为新的字符集。因此,如果列中有UTF-8编码数据,则应首先将其转换为
二进制
字符集,然后再转换为UTF-8。(如果您已经转换为UTF-8,请不要担心-再转换回
latin1
然后
binary
然后
utf8
)。