糟糕的MySQL导入,现在我们有垃圾显示代替utf-8字符

时间:2011-05-12 16:26:56

标签: encoding utf-8 ascii iso

我们从不同格式的备份恢复到新的MySQL结构(为UTF-8支持正确设置)。我们在浏览器中显示了奇怪的字符,但我们不确定它们的名称是什么,因此我们可以找到它们翻译的主列表。

我注意到他们确实与特定角色有关。例如:

â„¢ always translates to ™
— always translates to —
• always translates to ·

我引用了这篇文章,这让我开始了,但这远远不是一个完整的清单。我不是在搜索正确的名称,也不是搜索这些从坏到好的转换的“主列表”,因为参考不存在。

参考: Detecting utf8 broken characters in MySQL

此外,当尝试通过MySQL查询进行搜索时,如果我搜索â,我总是让MySQL将其视为“a”。有没有办法调整我的MySQL查询,以便他们更直观的搜索?我们不太使用国际化,所以我可以安全地假设包含â字符的任何字段被认为是一个有问题的条目,需要通过我们正在构建的“fixit”脚本来补救。

1 个答案:

答案 0 :(得分:2)

我认为最好直接修复问题,而不是设计一个“fixit”脚本来替换这些数据。似乎数据最初以不同于UTF-8的格式存储,因此当您将其放入为UTF-8设置的表中时,它会使文本乱码。如果有机会,请返回原始备份以确定存储数据的格式。如果您不能这样做,您可能需要进行一些试验和错误以确定数据的格式但是,一旦你知道,转换很容易。阅读以下文章的修复部分:

http://www.istognosis.com/en/mysql/35-garbled-data-set-utf8-characters-to-mysql-

基本上,您要将列设置为BINARY,然后将其设置为原始字符集。这应该使文本正确显示(一个很好的检查,知道你正在使用正确的字符集)。完成后,将列设置为UTF-8。这将正确转换数据,它将纠正您当前遇到的问题。