如何将错误编码的数据转换为UTF-8?

时间:2013-11-22 18:21:35

标签: php mysql character-encoding

我正在处理来自旧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编码,但这似乎无法修复文本。我是否必须编写一个手动将这些字符更改为应该是什么的脚本?

1 个答案:

答案 0 :(得分:24)

select convert(binary convert(field_name using latin1) using utf8) from table_name

如果显示正确,您可以进行更新。