Tôi đã dành nửa ngày để tìm kiếm câu trả lời cho lỗi "Kết hợp bất hợp pháp" đáng sợ. Tôi nhận thấy rằng một số cột trong cơ sở dữ liệu của mình không được đối chiếu cụ thể utf8_unicode_ci . Có vẻ như mysql đã ngầm đối chiếu các cột này utf8_general_ci .
Cụ thể, khi chạy truy vấn 'SHOW CREATE TABLE table1', kết quả như sau:
| bảng1 | TẠO BẢNG table1
(id
int (11) NOT NULL, col1
varchar (4) BỘ NHÂN VẬT utf8 NOT NULL, col2
int (11) NOT NULL, PRIMARY KEY (photo_id
, thẻ tag
)) ENGINE =InnoDB DEFAULT CHARSET =utf8 COLLATE =utf8_unicode_ci |
Lưu ý dòng 'col1' varchar (4) BỘ NHÂN VẬT utf8 NOT NULL không có đối chiếu được chỉ định. Sau đó, tôi đã chạy truy vấn sau:
ALTER TABLE table1 THAY ĐỔI col1 col1 VARCHAR (4) BỘ NHÂN VẬT utf8COLLATE utf8_unicode_ci NOT NULL;
Điều này đã giải quyết được lỗi "Kết hợp đối chiếu bất hợp pháp" của tôi. Hy vọng điều này có thể giúp ích cho người khác.