У меня была похожая проблема, я пытался использовать процедуру 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'
Короткий ответ:
Нет необходимости изменять какие-либо переменные 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 рядом с объявлением переменной, переменная сопоставления совпала с сопоставлением, настроенным для таблицы.