【问题标题】:MySQL, Altering Table from Latin-1 to UTF-8MySQL,将表从 Latin-1 更改为 UTF-8
【发布时间】:2010-06-14 23:11:55
【问题描述】:

我想在我的 Latin-1 字符数据库中删除新条目,只允许 UTF-8。我计划更改表并进行以下更改:

字符集:latin1 -> utf-8

排序规则:latin1_swdish_ci -> utf8_general_ci

有问题的表有 100 万行。这是一个好主意吗?这样做有什么风险?我尝试输入的非 utf-8 数据会发生什么情况?之前输入的不是 utf-8 的数据会怎样?

【问题讨论】:

    标签: mysql utf-8


    【解决方案1】:

    您应该创建一个表副本,启动一个事务,插入旧表中的所有行,然后提交。最安全的方法。

    总结一下:

    CREATE TABLE duplicate ... (with the charset you like, etc)
    
    SET AUTOCOMMIT=0;
    START TRANSACTION;
    INSERT INTO duplicate (...field-list...)
       SELECT (...field-list...) from original_table;
    COMMIT;
    
    ALTER TABLE original RENAME TO original_backup;
    ALTER TABLE duplicate RENAME TO original;
    

    您必须小心使用唯一索引和自动增量字段。确保创建没有索引的重复表,以便快速插入,然后添加它们。

    【讨论】:

    • 欣赏圣地亚哥巴苏尔托的回答。我会完全按照你的建议去做。 :)
    【解决方案2】:

    另一种方法是更改​​字符集。以下 2 个语句应该转换您的表和所有列。

    ALTER TABLE schema.table_name CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE schema.table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    

    如果您有外键,但会收到警告,因为您需要删除它们,请运行上述 SQL,然后重新创建它们。

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 2011-05-17
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2012-02-11
      • 2010-10-12
      相关资源
      最近更新 更多