Ho avuto un problema simile, stavo cercando di utilizzare la procedura FIND_IN_SET con una variabile stringa .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
e stava ricevendo l'errore
Codice errore: 1267. Mix illegale di regole di confronto (utf8_unicode_ci, IMPLICIT) e (utf8_general_ci, IMPLICIT) per l'operazione 'find_in_set'
Risposta breve:
Non è necessario modificare alcuna variabile collation_YYYY, è sufficiente aggiungere la fascicolazione corretta accanto alla dichiarazione della variabile , ad es
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Risposta lunga:
Ho prima verificato le variabili di confronto:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Quindi ho controllato le regole di confronto della tabella:
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;
Ciò significa che la mia variabile è stata configurata con le regole di confronto predefinite di utf8_general_ci mentre la mia tabella è stata configurata come utf8_unicode_ci .
Aggiungendo il comando COLLATE accanto alla dichiarazione delle variabili, le regole di confronto variabili corrispondevano alle regole di confronto configurate per la tabella.