У меня была аналогичная проблема, я пытался использовать процедуру FIND_IN_SET со строковой переменной.
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
и получал ошибку
Код ошибки: 1267 Недопустимое сочетание сопоставлений (utf8_unicode_ci, IMPLICIT) и (utf8_general_ci, IMPLICIT) для операции «find_in_set»
blockquote>Краткий ответ:
Не нужно менять переменные 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 next к объявлению переменной, сопоставление переменных соответствует настройке, настроенной для таблицы.