Преобразование таблиц mysql из latin1 в utf8

Я пытаюсь преобразовать некоторые таблицы mysql из latin1 в utf8. Я использую следующую команду, которая, кажется, в основном работает.

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Однако в одной таблице я получаю ошибку о дублировании ключевой записи. Это вызвано уникальным индексом в поле «имя». Кажется, что при преобразовании в utf8 любые "специальные" символы индексируются как их прямой английский эквивалент. Например, уже существует запись со значением поля имени «Dru». При преобразовании в utf8 запись с "Drü" считается дубликатом. То же самое с «Патриком» и «Патриком».

Вот как воспроизвести проблему:

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
16
задан OMG Ponies 1 November 2010 в 16:07
поделиться