Ich hatte ein ähnliches Problem, wurde versucht , die FIND_IN_SET Prozedur mit einer Zeichenfolge zu verwenden Variable .
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
und erhielt den Fehler
Fehlercode: 1267. Unzulässige Mischung von Kollatierungen (utf8_unicode_ci, IMPLICIT) und (utf8_general_ci, IMPLICIT) für die Operation 'find_in_set'
Kurze Antwort:
Sie müssen keine Variablen collation_YYYY ändern. Fügen Sie einfach die richtige Kollatierung neben Ihrer Variablendeklaration hinzu , d. H.
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Lange Antwort:
Ich habe zuerst die Kollatierungsvariablen überprüft:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Dann habe ich die Tabellensortierung überprüft:
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;
Dies bedeutet, dass meine Variable mit der Standardkollatierung von utf8_general_ci konfiguriert wurde, während meine Tabelle als utf8_unicode_ci konfiguriert wurde .
Durch Hinzufügen des Befehls COLLATE neben der Variablendeklaration stimmte die Variablenkollatierung mit der für die Tabelle konfigurierten Kollatierung überein.