我需要将两个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;
另一种选择是锁定表,删除外键,更改字符集,然后重新创建键,但我只是希望这个快捷方式也能正常工作。
不要更改字符集,只执行ALTER ... CONVERT TO ...
。 后者同时进行声明和数据。
如果已同时完成这两项操作,请检查数据:
SELECT col, HEX(col) FROM exampleTable WHERE ...
让我们看看十六进制是否正确。 您可能最终会得到可怕的"双重编码"。