আমারও একই সমস্যা ছিল, স্ট্রিং ভেরিয়েবলের সাথে 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) অবৈধ মিশ্রণ
সংক্ষিপ্ত উত্তর:
কোনও কোলেশন_ 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_unicode_ci হিসাবে কনফিগার করা অবস্থায় আমার চলকটি utf8_general_ci এর ডিফল্ট সমাহার দিয়ে কনফিগার করা হয়েছিল ।
ভেরিয়েবল ঘোষণার পাশের COLLATE কমান্ড যুক্ত করে, ভেরিয়েবল কোলেশনটি টেবিলের জন্য কনফিগার করা জোটের সাথে মেলে।