我想将新条目删除到我的Latin-1字符数据库中,只允许使用UTF-8。我计划更改表并进行以下更改:
Charset: latin1 - >的 UTF-8
整理: latin1_swdish_ci - >的 utf8_general_ci
有问题的表有100万行。这是一个好主意吗?这样做有什么风险?我试图输入的数据不是在utf-8中会发生什么?先前输入的数据不是utf-8会发生什么?
答案 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,然后重新创建它们。