我正在尝试将一些 mysql 表从 latin1 转换为 utf8。我正在使用以下命令,这似乎主要工作。
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
但是,在一张桌子上,我收到有关重复键条目的错误。这是由“名称”字段上的唯一索引引起的。似乎在转换为 utf8 时,任何“特殊”字符都被索引为它们的直接英文等价物。例如,已经有一条名称字段值为“Dru”的记录。转换为 utf8 时,带有“Drü”的记录被视为重复。“Patrick”和“Påtrìçk”也是如此。
以下是重现该问题的方法:
CREATE TABLE `example` ( `name` char(20) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO example (name) VALUES ('Drü'),('Dru'),('Patrick'),('Påtrìçk');
ALTER TABLE example convert to character set utf8 collate utf8_general_ci;
ERROR 1062 (23000): Duplicate entry 'Dru' for key 1