【问题标题】:is this a safe way to change character set on a MySQL table to UTF-8这是将 MySQL 表上的字符集更改为 UTF-8 的安全方法吗
【发布时间】:2016-05-20 09:56:15
【问题描述】:

我需要将两个 MySQL 表上的字符集更改为 UTF8。最初我想出了以下查询,但我想知道这是否是更改具有外键的(实时)表上的字符集的安全方法。在我的开发环境中,我只使用了没有锁的“FOREIGN_KEY_CHECKS = 0”,但当时我并不关心完整性,而是使用实时系统。

LOCK TABLES 
  tags WRITE,
  tags_lost WRITE;

  SET FOREIGN_KEY_CHECKS = 0;

    ALTER TABLE myDB.exampleTable CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE myDB.exampleTable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE myDB.exampleTable CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE myDB.exampleTable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

  SET FOREIGN_KEY_CHECKS = 1;    
UNLOCK TABLES;   

另一种选择是锁定表,删除外键,更改字符集,然后重新创建键,但我只是希望这个快捷方式也能正常工作。

【问题讨论】:

标签: mysql sql database utf-8


【解决方案1】:

不要更改字符集,只更改ALTER ... CONVERT TO ...。后者同时进行声明和数据。

如果你都已经做了,请检查数据:

SELECT col, HEX(col) FROM exampleTable WHERE ...

让我们看看十六进制是否正确。你可能会得到可怕的“双重编码”。

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2011-03-31
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多