Alle Tabellen sind in utf_unicode_ci
.
Ich habe das getan, um zu überprüfen
SELECT table_schema, table_name, column_name, character_set_name, collation_name
FROM information_schema.columns
WHERE collation_name <> 'utf8_unicode_ci' AND table_schema LIKE 'my_database'
ORDER BY table_schema, table_name, ordinal_position;
Und jeden Tisch für alle Fälle konvertiert
ALTER TABLE `my_database`.`table_name` DEFAULT COLLATE utf8_unicode_ci;
ALTER TABLE `my_database`.`table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Meine Einstellungen für die Datenbanksortierung befinden sich in utf8_unicode_ci
.
zeichensätze sind
mysql> zeige Variablen wie 'char%'; + -------------------------- + - -------------------------- + | Variablenname | Wert | + -------------------------- + --------------- ------------- + | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binär | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir |/usr/share/mysql/charsets/| + -------------------------- + ------- --------------------- + 8 Reihen im Satz (0,02 Sek.)
sortierungen sind
mysql> zeige Variablen wie 'colla%'; + ---------------------- + ----------- ------ + | Variablenname | Wert | + ---------------------- + ----------------- + | Kollatierungsverbindung | utf8_unicode_ci | | collation_database | utf8_unicode_ci | | Kollatierungsserver | utf8_unicode_ci | + ---------------------- + ----------------- + 3 Reihen im Satz (0,00 Sek.)
der Fehler wird ausgelöst, wenn ich die gespeicherte Prozedur über einen Webbrowser oder über den Mysql-Bash-Client aufrufen. Nur für den Fall, dass meine Gebietsschemaeinstellungen für Ubuntu/Linux wie folgt sind:
$ locale LANG = es_ES.UTF-8 LANGUAGE = es_ES.UTF-8 LC_CTYPE = es_ES.UTF-8 LC_NUMERIC = "es_ES.UTF- 8 " LC_TIME =" es_ES.UTF-8 " LC_COLLATE = es_ES.UTF-8 LC_MONETARY =" es_ES.UTF-8 " LC_MESSAGES = es_ES .UTF-8 LC_PAPER = "es_ES.UTF-8" LC_NAME = "es_ES.UTF-8" LC_ADDRESS = "es_ES.UTF-8" LC_TELEPHONE = "es_ES.UTF-8" LC_MEASUREMENT = "es_ES.UTF-8" LC_IDENTIFICATION = "es_ES.UTF-8" LC_ALL =
Die einzige Möglichkeit, dieses Problem zu lösen, besteht in der Verwendung von convert
in jeder Abfrage, die den Fehler verursacht (oder der Verwendung von COLLATE
in der Abfrage). Das Problem ist jedoch, dass es viele recht komplexe gespeicherte Prozeduren gibt, die schwer zu identifizieren sind das "schlechte" fragt ab und braucht viel Zeit.
Ich vermute, dass die Variablen, die von meinem System (ubuntu: mysql client, browser) an die gespeicherte Prozedur übergeben werden, in utf8_general_ci gesendet werden, sodass es zu Konflikten mit ut8_unicode_ci aus meiner Datenbank kommt.
Es scheint, dass das Betriebssystem mit utf8_general_ci arbeitet, obwohl die mysql-Verbindung auf utf_unicode_ci gesetzt ist.
Ich habe mein Problem gelöst und war aufgrund einer falschen Konvertierung während der Migration nicht in utf8_unicode_ci, sondern in utf_general_ci konvertiert. Obwohl die Datenbankstruktur von mysql korrekt ist, wurden die Quelldaten in der falschen Codierung (utf8_general_ci) codiert und in die mysql ddbb eingefügt dieser Weg.
Die Sache ist also, dass Sie den richtigen Zeichensatz und die richtige Sortierung in Ihrer mysql-Datenbank haben können und trotzdem den Fehler "Ungültige Mischung aus Sortierungen" erhalten, da die Daten mit einer anderen Sortierung versehen sind.
Hoffe, das hilft jemandem in der Zukunft.
falls es jemandem hilft, hatten wir den gleichen Fehler bei einer Abfrage in verschiedenen Datenbanken verschiedener Server. Der Fehler war eine Migration von einem anderen Server. In unserem Fall wurde dies behoben, indem der "collation_server" in mysql.ini geändert und der mysql-Dienst neu gestartet wurde.
Wenn Sie gespeicherte Prozeduren und gespeicherte Funktionen erneut importieren, sobald Sie die richtigen Einstellungen für die Kodierung und Sortierung vorgenommen haben, werden die Probleme behoben. Läuft in genau das gleiche Problem. Eine weitere hilfreiche mysql-Funktion zur Fehlerbehebung: Wählen Sie die Kollatierung (some_col) aus some_table aus, wenn Sie Probleme mit Ihrem Tabellendatenformat vermuten.
Ich habe mein Problem gelöst, nachdem ich den CHARSET utf8 in einer Parameterliste hinzugefügt habe. kann dies helfen, voll zu anderen,
PROCEDURE `USP_USR_AuthenticateUser`(
IN ip_username VARCHAR(50) CHARSET utf8**,
IN ip_pwd NVARCHAR(256)
)