मुझे एक समान समस्या थी, एक स्ट्रिंग चर के साथ FIND_IN_SET प्रक्रिया का उपयोग करने की कोशिश कर रहा था ।
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
और त्रुटि प्राप्त कर रहा था
त्रुटि कोड: 1267. ऑपरेशन 'find_in_set' के लिए कोलाज का अवैध मिश्रण (utf8_unicode_ci, IMPLICIT) और (utf8_general_ci, IMPLICIT)
संक्षिप्त जवाब:
किसी भी collation_YYYY चर को बदलने की आवश्यकता नहीं है, बस अपने चर घोषणा के बगल में सही कोलाजेशन जोड़ें , अर्थात
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
लंबा जवाब:
मैंने पहली बार टकराव चर की जाँच की:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
फिर मैंने टेबल कोलाज की जाँच की:
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;
इसका मतलब यह है कि मेरे चर को utf8_general_ci के डिफ़ॉल्ट टकराव के साथ कॉन्फ़िगर किया गया था, जबकि मेरी तालिका utf8_unicode_ci के रूप में कॉन्फ़िगर की गई थी ।
चर घोषणा के बगल में COLLATE कमांड जोड़कर, चर कोलाजेशन ने तालिका के लिए कॉन्फ़िगर किए गए टकराव का मिलान किया।