MySQL,将表格从Latin-1改为UTF-8

时间:2010-06-14 23:11:55

标签: mysql utf-8

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

Charset: latin1 - >的 UTF-8

整理: latin1_swdish_ci - >的 utf8_general_ci

有问题的表有100万行。这是一个好主意吗?这样做有什么风险?我试图输入的数据不是在utf-8中会发生什么?先前输入的数据不是utf-8会发生什么?

2 个答案:

答案 0 :(得分:3)

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

总结:

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;

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

答案 1 :(得分:0)

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

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,然后重新创建它们。