【问题标题】:Changing MySQL DB encoding from Latin1_swedish to UTF-8将 MySQL DB 编码从 Latin1_swedish 更改为 UTF-8
【发布时间】:2015-02-03 11:12:03
【问题描述】:

我无法将数据从 Latin1_swedish 转换为 UTF-8。

应用基于 Symfony2,数据库为 MySQL。

我已经尝试过这个查询:

ALTER TABLE <tablename> CONVERT TO CHARACTER 
SET utf8 COLLATE utf8_unicode_ci

和:

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

我想要一个处理所有表和列的解决方案,因为 MySQL 数据库有 1000 个表。如果我必须手动修改它们,那将花费太长时间。

【问题讨论】:

    标签: php mysql symfony encoding utf-8


    【解决方案1】:

    既然你提到了“奇怪的字符”,我怀疑“从 latin1 更改为 utf8”不是真正的任务,而是修复在 INSERT 期间发生的某种混乱。 p>

    大约有5个案例需要处理。我们还不知道您有哪种情况。请提供

    • SHOW CREATE TABLE 用于您尝试更改的表。
    • SELECT col, HEX(col) ... 用于某些具有非 ascii 文本的单元格。

    让我们回顾一下尝试:

    ALTER TABLE <tablename> CONVERT TO CHARACTER  SET utf8;
    

    假设表被声明为 latin1 并且正确包含 latin1 字节,但您想将其更改为 utf8。由于latin1中不存在'Ă'和'Ĺ',这个ALTER感觉很不对劲。

    ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
    

    与上面类似,但一次只工作一列,并且在 MODIFY 子句中需要完全正确的内容。因此,这将是相当乏味的。

    ALTER DATABASE databasename DEFAULT CHARACTER SET utf8;
    

    仅为在该databasename 中创建的任何新表设置默认 CHARACTER SETDEFAULT 这个词是可选的。

    HEX('ĂĹ') = 'C482C4B9' -- 所以看起来你正在使用一些东欧语言,也许使用的是 utf8,也许不是。请提供进一步的细节。 Ă 之前和之后发生了什么?

    “奇怪字符”的修复可能在my blog,但需要详细信息直接指出。

    【讨论】:

      【解决方案2】:

      你试过了吗?

      ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      

      【讨论】:

        【解决方案3】:

        如果你想改变整个数据库,你应该运行这个命令:

        ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
        

        【讨论】:

        • 不幸的是,它也不起作用。还是有'Ă'或'Ĺ'之类的奇怪字符。
        猜你喜欢
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多