Tuve un problema similar, estaba tratando de usar el procedimiento FIND_IN_SET con una variable de cadena .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
y estaba recibiendo el error
Código de error: 1267. Mezcla ilegal de intercalaciones (utf8_unicode_ci, IMPLICIT) y (utf8_general_ci, IMPLICIT) para la operación 'find_in_set'
Respuesta corta:
No es necesario cambiar ninguna variable colation_YYYY, solo agregue la colación correcta al lado de su declaración de variable , es decir
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Respuesta larga:
Primero verifiqué las variables de intercalación:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Luego revisé la clasificación de la tabla:
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;
Esto significa que mi variable se configuró con la clasificación predeterminada de utf8_general_ci mientras que mi tabla se configuró como utf8_unicode_ci .
Al agregar el comando COLLATE junto a la declaración de variables, la clasificación variable coincidió con la clasificación configurada para la tabla.