Illegaler Kollationsmix für den Gleichstellungsvergleich: Ein umfassender Leitfaden
Bei der Arbeit mit Datenbanken ist die Sicherstellung der Datenintegrität und -konsistenz von entscheidender Bedeutung. Ein häufiger Fehler, der beim Ausführen von Vorgängen an Tabellen mit unterschiedlichen Sortierungen auftritt, ist „Unzulässige Kombination von Sortierungen“. Dieser Fehler tritt auf, wenn ein Vorgang versucht, Werte in Spalten oder Feldern zu vergleichen, die unterschiedliche Zeichensätze oder Sortiereinstellungen haben.
Grundlegendes zu Sortierungen
Sortierung definiert die Regeln für den Vergleich und Sortieren von Zeichendaten. Unterschiedliche Sortierungen können eine unterschiedliche Zeichenreihenfolge und Groß-/Kleinschreibung aufweisen, was zu unerwarteten Vergleichsergebnissen führt. Beispielsweise kann „Müller“ in einem UTF-8-Zeichensatz unterschiedlich sortiert werden, je nachdem, ob bei der Sortierung die Groß-/Kleinschreibung beachtet wird oder nicht.
Fehlermeldung:
Die Fehlermeldung „Unzulässige Mischung von Kollatierungen (utf8_unicode_ci,IMPLICIT) und (utf8_general_ci,IMPLICIT) für den Betrieb '=' " gibt an, dass der Versuch, Werte mit dem Gleichheitsoperator (=) zu vergleichen, zwei Spalten oder Felder mit unterschiedlichen Sortierungen umfasst: utf8_unicode_ci und utf8_general_ci.
Auflösungen:
Um diesen Fehler zu beheben, gibt es mehrere Optionen:
Sortierung explizit hinzufügen:
Sortierung für Eingabevariablen explizit mit dem Schlüsselwort COLLATE angeben:
SET @rUsername = 'aname' COLLATE utf8_unicode_ci; CALL updateProductUsers(@rUsername, @rProductID, @rPerm);
COLLATE an das WHERE anhängen Klausel:
WHERE users.username = rUsername COLLATE utf8_unicode_ci
Übereinstimmende Sortierung in gespeicherter Prozedur verwenden:
Ändern Sie die gespeicherte Prozedur, um die richtige Sortierung für die IN-Parameterdefinition anzugeben (wenn die MySQL-Version kleiner ist als 5.7):
CREATE PROCEDURE updateProductUsers( IN rUsername VARCHAR(24) COLLATE utf8_unicode_ci, IN rProductID INT UNSIGNED, IN rPerm VARCHAR(16)) BEGIN ... END
Tabellen in passende Sortierung konvertieren:
Ändern Sie die Datenbanktabellen, um eine übereinstimmende Sortierung zu verwenden und so eine zukünftige Sortierung zu vermeiden Nichtübereinstimmungen:
ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;
Best Practice:
Als Faustregel empfiehlt sich die Verwendung von gleiche Sortierung für Tabellen, die an Vergleichen beteiligt sind. Dies stellt die Konsistenz sicher und vermeidet potenzielle Fehler im Zusammenhang mit der Sortierung. Wenn jedoch unterschiedliche Sortierungen erforderlich sind, ist eine explizite Angabe der Sortierung unerlässlich.
Das obige ist der detaillierte Inhalt vonWie kann ein „Ungültiger Kollationsmix für den Gleichheitsvergleich' in Datenbanken behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!