Tôi gặp vấn đề tương tự, đã cố gắng sử dụng thủ tục FIND_IN_SET với biến chuỗi .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
và đã nhận được lỗi
Mã lỗi: 1267. Kết hợp bất hợp pháp các collations (utf8_unicode_ci, IMPLICIT) và (utf8_general_ci, IMPLICIT) cho hoạt động 'find_in_set'
Câu trả lời ngắn:
Không cần thay đổi bất kỳ biến collation_YYYY nào, chỉ cần thêm đối chiếu chính xác bên cạnh khai báo biến của bạn , nghĩa là
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Câu trả lời dài:
Lần đầu tiên tôi kiểm tra các biến đối chiếu:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Sau đó, tôi đã kiểm tra đối chiếu bảng:
mysql> SHOW CREATE TABLE my_table;
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`column_name` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=125 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Điều này có nghĩa là biến của tôi được cấu hình với đối chiếu mặc định là utf8_general_ci trong khi bảng của tôi được định cấu hình là utf8_unicode_ci .
Bằng cách thêm lệnh COLLATE bên cạnh khai báo biến, đối chiếu biến phù hợp với đối chiếu được cấu hình cho bảng.