【问题标题】:Bad MySQL import, now we have garbage showing in place of utf-8 chars错误的 MySQL 导入,现在我们用垃圾显示代替 utf-8 字符
【发布时间】:2011-08-24 06:53:08
【问题描述】:

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

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

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

我参考了这篇文章,这让我开始了,但这远不是一个完整的列表。要么我没有搜索正确的名称,要么这些从坏到好转换的“主列表”作为参考不存在。

参考: Detecting utf8 broken characters in MySQL

另外,当尝试通过 MySQL 查询进行搜索时,如果我搜索 â,我总是让 MySQL 将其视为“a”。有什么方法可以调整我的 MySQL 查询,使它们成为更多的文字搜索?我们很少使用国际化,因此我可以安全地假设任何包含 â 字符的字段都被认为是有问题的条目,这需要通过我们正在构建的“fixit”脚本来解决。

【问题讨论】:

    标签: encoding utf-8 ascii iso


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2017-06-04
      • 2015-04-22
      相关资源
      最近更新 更多