我正在处理来自旧mysql数据库的数据。这个数据库中有一个表,其字符串列的编码设置为" cp1252西欧(latin1)" (与Windows-1252相同)。从mysql命令提示符查询数据时,此字段中的数据表示为:
Obama’s
这应该是
Obama’s
我已经尝试按照How to convert an entire MySQL database characterset and collation to UTF-8?的接受答案将MySQL中的字段转换为UTF-8,但没有区别。
我还尝试在该表中插入一个新行,使用Obama’s
作为该字段的文本(同样,来自mysql命令提示符)。但是,当我查询刚刚插入的同一行时,正确表示了此文本。当字段设置为latin1并且设置为UTF-8时,我尝试执行该插入。结果相同。
这让我相信,当坏数据被插入到数据库中时,它首先被PHP错误地编码。这就是我对它模糊的地方。
我可以假设数据是通过Web表单插入并使用PHP处理的。 PHP在将其插入数据库之前做了什么?它是否将字符串转换为UTF-8,根据table on this helpful page,它使用三个字节%E2 %80 %99
来表示’
字符。我有这个权利吗?
如果这是正确的,我可以选择修复此数据吗?我想将表及其字段转换为UTF-8编码,但这似乎无法修复文本。我是否必须编写一个手动将这些字符更改为应该是什么的脚本?
答案 0 :(得分:24)
select convert(binary convert(field_name using latin1) using utf8) from table_name
如果显示正确,您可以进行更新。