Saya memiliki masalah yang sama, mencoba menggunakan prosedur FIND_IN_SET dengan variabel string .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
dan menerima kesalahan
Kode Kesalahan: 1267. Campuran collation ilegal (utf8_unicode_ci, IMPLICIT) dan (utf8_general_ci, IMPLICIT) untuk operasi 'find_in_set'
Jawaban singkat:
Tidak perlu mengubah variabel collation_YYYY, cukup tambahkan pemeriksaan yang benar di sebelah deklarasi variabel Anda , yaitu
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Jawaban panjang:
Saya pertama kali memeriksa variabel pemeriksaan:
mysql> SHOW VARIABLES LIKE 'collation%';
+
| Variable_name | Value |
+
| collation_connection | utf8_general_ci |
+
| collation_database | utf8_general_ci |
+
| collation_server | utf8_general_ci |
+
Lalu saya memeriksa susunan tabel:
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;
Ini berarti variabel saya dikonfigurasi dengan pemeriksaan default utf8_general_ci sementara tabel saya dikonfigurasi sebagai utf8_unicode_ci .
Dengan menambahkan perintah COLLATE di sebelah deklarasi variabel, pemeriksaan variabel cocok dengan pemeriksaan yang dikonfigurasi untuk tabel.