代码之家  ›  专栏  ›  技术社区  ›  Brent Baisley

将mysql表从latin1转换为utf8

  •  16
  • Brent Baisley  · 技术社区  · 14 年前

    我正在尝试将一些mysql表从latin1转换为utf8。我正在使用下面的命令,这似乎是最有效的。

    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    

    以下是如何再现问题:

    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
    
    2 回复  |  直到 14 年前
        1
  •  20
  •   Hammerite    14 年前

    弦的原因 'Drü' 'Dru' 评估方法与 utf8_general_ci 校勘,他们算“一样”。目的 校勘 因为一个字符集提供一组关于字符串何时相同、何时一个排序在另一个排序之前等的规则。

    如果需要一组不同的比较规则,则需要选择不同的排序规则。您可以看到 utf8 SHOW COLLATION LIKE 'utf8%' . 有一组主要用于特定语言的文本的排序规则;还有 utf8_bin 将所有字符串作为二进制字符串进行比较的排序规则(即将它们作为0和1的序列进行比较)。

        2
  •  3
  •   Quassnoi    14 年前

    UTF8_GENERAL_CI 对口音不敏感。

    使用 UTF8_BIN