如何将mysql表从latin1转换为utf8?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

我想将一些MySQL表从latin1转换为utf8。我正在使用下面的命令

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

但是,在表上,我得到一个关于重复输入的错误。这是由“name”字段上的唯一索引造成的。

这里是如何重现这个问题:

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
提问于
用户回答回答于

如果您想要一组不同的比较规则,则需要选择不同的排序规则。控件的可用排序规则。utf8通过发出字符集SHOW COLLATION LIKE 'utf8%'...。有一堆用于文本的排序规则,这些文本主要是在特定语言中;还有utf8_bin排序规则,它将所有字符串作为二进制字符串进行比较(即将它们作为0和1s的序列进行比较)。

用户回答回答于

UTF8_GENERAL_CI不敏感。

使用UTF8_BIN或者是特定于语言的校对。

扫码关注云+社区