小编Bre*_*ley的帖子

将mysql表从latin1转换为utf8

我正在尝试将一些mysql表从latin1转换为utf8.我正在使用以下命令,这似乎主要起作用.

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

但是,在一个表上,我收到有关重复键输入的错误.这是由"名称"字段上的唯一索引引起的.在转换为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
Run Code Online (Sandbox Code Playgroud)

mysql collation utf-8 latin1 mysql-error-1062

16
推荐指数
1
解决办法
1万
查看次数

标签 统计

collation ×1

latin1 ×1

mysql ×1

mysql-error-1062 ×1

utf-8 ×1