いくつかのmysqlテーブルをlatin1からutf8に変換しようとしています。私は次のコマンドを使用していますが、これはほとんど機能しているようです。
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ただし、1つのテーブルで、キーエントリの重複に関するエラーが発生します。これは、「名前」フィールドの一意のインデックスが原因で発生します。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