【问题标题】:Advice on converting ISO-8859-1 data to UTF-8 in MySQL在 MySQL 中将 ISO-8859-1 数据转换为 UTF-8 的建议
【发布时间】:2012-07-16 14:25:27
【问题描述】:

我们有一个非常大的 InnoDB MySQL 5.1 数据库,其中所有表都使用 latin1_swedish_ci 排序规则。我们希望将所有应该在 ISO-8859-1 中的数据转换为 UTF-8。将排序规则更改为utf8_general_ci 的效果如何?

我们最好编写一个脚本来转换数据并插入到一个新表中吗?显然,我们的目标是尽量减少重新编码时丢失任何数据的风险。

编辑:我们确实有重音字符、£ 符号等。

【问题讨论】:

    标签: php mysql unicode utf-8 character-encoding


    【解决方案1】:

    大约一周前,我不得不做同样的任务(ö, ä, å 的问题)

    1. 创建了dump.sql
    2. 搜索并替换所有CHARSET=latin1 CHARSET=utf8(在dump.sql中)。
    3. 搜索并替换所有COLLATE=latin1_swedish_ci COLLATE=utf8_unicode_ci(在dump.sql中)。
    4. 使用排序规则 utf8_unicode_ci 创建了一个新数据库。
    5. 已导入dump.sql
    6. 将数据库的charset 更改为alter database MY_DB charset=utf8;

    效果很好

    注意:在 Mike Brant 的评论之后,我认为最好对您特别想要的字段进行手动搜索和替换。或者您可以简单地为每个字段使用ALTER,而不需要dump.sql。我的情况并没有太大变化,因为我的大部分字段都需要进行 utf 编码

    【讨论】:

      【解决方案2】:

      如果数据当前仅使用拉丁字符,并且您只是想将字符集和排序规则更改为 UTF8 以启用将来添加 UTF-8 数据,那么只需更改字符集和排序规则应该没有问题。我当然会先在表格的副本中这样做。

      【讨论】:

      • 在 MySQL 中,您必须更改数据库、每个表以及每个表中的每一列的编码。除非有脚本,否则这是一项非常烦人的任务。
      • 我们里面有带重音符号的字符,我猜这不是拉丁语?
      • 那些确实存在于拉丁字符集中。您现在应该可以在数据库中看到它们了。
      • 您也不必更改数据库甚至表级别设置。如果用户在定义表(在 DB 级设置的情况下)或字段(在表级设置的情况下)时未特别指定字符集,则这些仅指示将使用的默认字符集和排序规则。您可以在同一个表中混合使用字符集和排序规则。请注意,简单地将 EVERYTHING 更改为 UTF-8 的方法对存储要求有重大影响,因为这将使整个系统中的所有字符串占用至少两倍的空间。
      • @MikeBrant,我完全同意。必须只更改包含需要以 unicode 存储的数据的字段。我的第一条评论犯了一个错误。 +1
      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2014-08-29
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多