Eu tive um problema semelhante, estava tentando usar o procedimento FIND_IN_SET com uma variável de string .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
e estava recebendo o erro
Código de erro: 1267. Combinação ilegal de agrupamentos (utf8_unicode_ci, IMPLICIT) e (utf8_general_ci, IMPLICIT) para a operação 'find_in_set'
Resposta curta:
Não é necessário alterar nenhuma variável collation_YYYY; basta adicionar o agrupamento correto ao lado da sua declaração de variável , ou seja,
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Resposta longa:
Primeiro verifiquei as variáveis de agrupamento:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Depois verifiquei o agrupamento da tabela:
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;
Isso significa que minha variável foi configurada com o agrupamento padrão de utf8_general_ci enquanto minha tabela foi configurada como utf8_unicode_ci .
Ao adicionar o comando COLLATE ao lado da declaração da variável, o agrupamento da variável correspondeu ao agrupamento configurado para a tabela.