简而言之,因为这已经被讨论了上千次了:
- PHP拥有一个
"漢字"
以UTF-8编码的字符串,例如。的字节为E6 BC A2 E5 AD 97
。 - 它通过 设置为
latin1
的 数据库连接 发送此字符串。 - 数据库接收字节
E6 BC A2 E5 AD 97
,认为这些字节代表latin1
字符。 - 数据库存储字符
æ¼¢å
(E6 BC A2 E5 AD 97
映射到中的字符latin1
)。 - 反向执行相同的过程会使PHP接收相同的字节,然后将其视为UTF-8。即使数据库未按应有的方式对待字符,往返也适用于PHP。
因此,这里的问题是,当将数据输入数据库时,数据库连接设置不正确。您必须将数据库中的数据转换为正确的字符。尝试这个:
SELECt ConVERT(BINARY ConVERT(field_name USING latin1) USING utf8) FROM table_name
utf8尝试一下,也许这不是您所需要的。如果可行,
UPDATE请将其更改为语句以永久更新数据。



