Php 如何将错误编码的数据转换为UTF-8?
我正在处理来自旧mysql数据库的数据。该数据库中有一个表,其字符串列的编码设置为“cp1252西欧(拉丁语)”(与Windows-1252相同)。从mysql命令提示符查询数据时,此字段的数据表示为:Php 如何将错误编码的数据转换为UTF-8?,php,mysql,character-encoding,Php,Mysql,Character Encoding,我正在处理来自旧mysql数据库的数据。该数据库中有一个表,其字符串列的编码设置为“cp1252西欧(拉丁语)”(与Windows-1252相同)。从mysql命令提示符查询数据时,此字段的数据表示为: Obama€™s 这个应该是读的 奥巴马的 我试着按照已被接受的答案在MySQL中将字段转换为UTF-8,但没有任何区别 我还尝试在该表中插入一个新行,使用Obama的作为该字段的文本(同样,从mysql命令提示符)。但是,当我查询刚才插入的同一行时,此文本正确表示。我尝试在字段设置为latin
Obama€™s
这个应该是读的
奥巴马的
我试着按照已被接受的答案在MySQL中将字段转换为UTF-8,但没有任何区别
我还尝试在该表中插入一个新行,使用Obama的
作为该字段的文本(同样,从mysql命令提示符)。但是,当我查询刚才插入的同一行时,此文本正确表示。我尝试在字段设置为latin1和设置为UTF-8时执行该插入。同样的结果
这让我相信,当坏数据被插入数据库时,它首先是由PHP错误编码的。这就是我感到模糊的地方
我可以假设数据是通过web表单插入并用PHP处理的。PHP在将其插入数据库之前做了什么?它是否将字符串转换为UTF-8,根据,UTF-8使用三个字节%E2%80%99
来表示'
字符。我有这个权利吗
如果这是正确的,我可以选择什么来修复这些数据?我想将表及其字段转换为UTF-8编码,但这似乎无法修复文本。我是否必须编写一个脚本,手动将这些字符更改为它们应该是什么
select convert(binary convert(field_name using latin1) using utf8) from table_name
如果显示正确,您可以进行更新 此处描述了导致此问题的问题:。在实际发送UTF-8编码数据时,连接编码很可能设置为
latin1
。要解决这个问题,您必须说服MySQL在latin1
中获取当前数据的字节,然后将其作为utf8
字节插入。有一个SQL one linerUPDATE
命令,但是现在找不到。亲爱的Brian,请接受唯一的答案,它救了我的命是的!我希望我能投10000次以上的票。这是一个简单易行的解决方案。事实上,这应该是选择的答案