WordPress - Fix Illegal mix of collations
Ich habe bei einem meiner Projekte letztens durch Zufall im Log einen Fehler gesehen, welchen ich gerne beheben wollte. Dort gab es einen Eintrag mit “WordPress-Datenbank-Fehler Illegal mix of collations” und den betroffenen Datenbank-Kollationen.Bis zu diesem Zeitpunkt war es mir nicht bewusst, dass ein solcher Fehler auftreten könnte. Scheinbar kann dieses bei Umzügen der Datenbanken bzw. Hoster passieren.In diesem Artikel zeige ich dir, wie du das Problem beheben kannst.
DarkWolfCave.de
WordPress - Illegal mix of collations Fehler beheben
Falls du dich fragst, was Kollationen genau sind und wieso diese einen Fehler erzeugen können, dann kann ich hier vielleicht ein wenig Licht ins Dunkle bringen, ohne zu sehr in die Details von Datenbanken abzutauchen.
Fangen wir ganz vorn an. Der genannte Fehler im ErrorLog mit: WordPress-Datenbank-Fehler Illegal mix of collations besagt, dass unter anderem zwei Tabellen miteinander verglichen werden sollten, diese aber eine jeweils andere Kollation benutzen. Warum gibt es dabei eine Fehlermeldung?
Das Problem beim Vergleichen von Tabellen mit unterschiedlichen Kollationen liegt darin, dass die Art und Weise, wie Zeichen in verschiedenen Kollationen interpretiert werden, unterschiedlich sein kann. Die Kollation beeinflusst die Reihenfolge von Zeichen, Groß- und Kleinschreibung, die Berücksichtigung von Akzenten und Sonderzeichen und andere Aspekte.
Wenn du versuchst, Daten zwischen Tabellen mit unterschiedlichen Kollationen zu vergleichen, könnten Unstimmigkeiten auftreten, da die Datenbank möglicherweise nicht in der Lage ist, korrekte Vergleiche durchzuführen. Zum Beispiel könnte die gleiche Zeichenfolge in einer Kollation als gleich betrachtet werden, während sie in einer anderen Kollation als unterschiedlich betrachtet wird.
Das kann zu inkonsistenten Ergebnissen führen und Probleme bei Abfragen, Sortierungen und Vergleichen verursachen. Daher ist es in der Regel eine bewährte Praxis, sicherzustellen, dass Tabellen, die miteinander verglichen oder verknüpft werden sollen, die gleiche Kollation haben.

Wir sollten uns daher um dieses Problem kümmern und dieses beheben.
Bevor wir loslegen, noch ein paar grundsätzliche Dinge zu diesem Thema. Die Vorgehensweisen, wie du Änderungen an deiner Datenbank durchführen kannst oder musst, können recht unterschiedlich sein. Hier kommt es unter anderem darauf an, welche Datenbank du benutzt (MySQL, MariaDB usw.) und ob du es über eine GUI (phpMyAdmin) oder CLI (also Terminal-Befehle) durchführst.
Illegal mix of collations - Genutzte Kollation(en) auf Datenbank anzeigen lassen
Ich werde hier jetzt phpMyAdmin benutzen, da es für die Meisten am einfachsten und bekanntesten sein wird. Zuerst würde ich gerne wissen, wie viele unterschiedliche Kollationen in meiner Datenbank vorhanden sind. Der Schritt ist nicht wirklich notwendig, aber interessant. Dafür führe ich folgenden SQL-Befehl aus (bei TABLE_SCHEMA = ‘NAME-DEINER-DATENBANK’ musst du natürlich den Namen deiner Datenbank eintragen) :
Dafür klickst du in phpMyAdmin einfach auf SQL:

SELECT table_name, table_collation
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'NAME-DEINER-DATENBANK';
Hier werden dir dann alle Tabellen(-Namen) und deren Kollation angezeigt. Bei vielen Tabellen kann es schnell unübersichtlich werden. Möchtest du einfach nur die Anzahl und die verschiedenen Kollationen sehen, gruppieren wir unsere Ausgabe einfach ein wenig:
SELECT table_collation, COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema = 'NAME-DEINER-DATENBANK'
GROUP BY table_collation;
In meinem Fall sah es dann so aus:

Illegal mix of collations - Die Standard Kollation auf der Datenbank ändern
Es gibt also 2 unterschiedliche Kollationen in dieser Datenbank. Beginnen wir damit, eine Kollation als default einzurichten. Jede weitere, neu erstellte Tabelle würde dann diese Kollation erhalten. Aber welche sollen wir nehmen? Ein kurzer Blick ins Internet und ich musste feststellen, die Frage scheint nicht oft gestellt zu werden.
Also habe ich mir mal den Sourcecode von WordPress angeschaut, um zu sehen, was diese dort verwenden würden. Nachsehen kannst du das auch gerne selbst in GitHub :

Es werden diverse Abfragen gestartet, ob eine bestimmte Kollation auf der Datenbank vorhanden/verfügbar ist. Am Ende wird auf die utf8mb4_unicode_520_ci verwiesen. Sollte diese also verfügbar sein, wird empfohlen diese zu nutzen. Mit dem Wissen schauen wir uns jetzt phpMyAdmin an. Einfach oben links auf das Haus und dann auf den Kollation-Namen klicken. Aus dem Drop-Down-Feld nehmen wir dann den utf8mb4_unicode_520_ci Eintrag:

Illegal mix of collations - Änderung der Kollation in den Tabellen
Du hast weitere Fragen oder benötigst Hilfe? Gerne versuche ich im Rahmen meiner Möglichkeiten dich zu unterstützen. Dafür kannst du hier die Kommentar-Sektion (nicht vergessen Antworten zu abonnieren) nutzen oder du schaust auf meinem Discord-Kanal vorbei.
Kommentare