Benzer bir sorun vardı, bir dize değişkeni ile FIND_IN_SET yordamı kullanmaya çalışıyordu .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
ve hatayı alıyordu
Hata Kodu: 1267. 'find_in_set' işlemi için geçersiz harmanlama karışımı (utf8_unicode_ci, IMPLICIT) ve (utf8_general_ci, IMPLICIT)
Kısa cevap:
Herhangi bir collation_YYYY değişkenini değiştirmenize gerek yok, sadece değişken bildiriminizin yanına doğru harmanlamayı ekleyin , yani
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Uzun cevap:
İlk olarak harmanlama değişkenlerini kontrol ettim:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Sonra tablo harmanlamasını kontrol ettim:
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;
Bu, tablonuz utf8_unicode_ci olarak yapılandırılırken değişkenimin varsayılan utf8_general_ci harmanlaması ile yapılandırıldığı anlamına gelir .
Değişken bildiriminin yanına COLLATE komutunu ekleyerek, değişken harmanlama tablo için yapılandırılan harmanlama ile eşleşir.