Tôi đang cố chuyển đổi một số bảng mysql từ latin1 sang utf8. Tôi đang sử dụng lệnh sau, mà dường như chủ yếu là làm việc.Chuyển đổi bảng mysql từ latin1 sang utf8
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Tuy nhiên, trên một bảng tôi gặp lỗi về mục nhập khóa trùng lặp. Điều này là do một chỉ mục duy nhất trên trường "tên". Có vẻ như khi chuyển sang utf8, bất kỳ ký tự "đặc biệt" nào được lập chỉ mục dưới dạng tương đương bằng tiếng Anh thẳng. Ví dụ, đã có một bản ghi với giá trị trường tên là "Dru". Khi chuyển đổi sang utf8, bản ghi có "Drü" được coi là trùng lặp. Tương tự với "Patrick" và "Påtrìçk".
Dưới đây là làm thế nào để tạo lại vấn đề:
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