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.
DarkWolfCave.de
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.
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.
Weiterhin empfehle ich dir auf jeden Fall ein Backup deiner Datenbank, bevor du Änderungen durchführst!
Auch dies kannst du auf unterschiedliche Arten durchführen.
Als WordPress Integration (Plugin) kann ich dir dafür UpdraftPlus empfehlen.
Natürlich kannst du ein Backup auch möglicherweise direkt über deinen Webhoster, oder direkt in phpMyAdmin durchführen.
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:
Diese Änderung bringt natürlich nichts bei den bereits verwendeten Tabellen. Um diese kümmern wir uns jetzt.
Illegal mix of collations – Änderung der Kollation in den Tabellen
Aber: Bevor du weiter machst, lege ein Backup deiner Daten an! Falls nicht schon wie oben erwähnt geschehen.
Ich lasse mir immer erst anzeigen, was geändert wird, bevor ich dann wirklich ein Update oder Delete durchführe.
Du kannst den Schritt natürlich überspringen. Mit einer leichten Anpassung des SQL-Befehls lasse ich mir hiermit alle Tabellen anzeigen, die nicht utf8mb4_unicode_520_ci als Kollation haben:
SELECT table_name, table_collation FROM information_schema.tables WHERE table_schema = 'NAME-DEINER-DATENBANK' AND table_collation != 'utf8mb4_unicode_520_ci';
Somit hättest du jetzt deine Ansicht und Anzahl der Tabellen, die wir ändern wollen. Im nächsten Schritt erzeugen wir ALTER TABLE Befehle mit den entsprechenden Tabellen und der neuen Kollation. Dieses Ergebnis musst du dann erneut in SQL ausführen.
Starte mit:
SELECT CONCAT( 'ALTER TABLE `', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;' ) AS alter_statement FROM information_schema.tables WHERE table_schema = 'NAME-DEINER-DATENBANK' AND table_collation != 'utf8mb4_unicode_520_ci';
Je nach Einstellung in phpMyAdmin wirst du die Ausgabe nicht ganz sehen können. Da wir damit aber weiter arbeiten möchten, sollten wir auch alles sehen können. Dafür klick auf “Zusätzliche Optionen” und dann wähle “Vollständige Texte” aus und bestätige mit “OK”:
Deine Ausgabe sollte jetzt auch vollständig sein und ähnlich wie bei mir aussehen. Markiere und kopiere alle Zeilen und füge sie in eine neue SQL-Abfrage ein und bestätige mit ok. Mit diesen ALTER TABLE Befehlen führen wir dann final die Änderungen an den Tabellen durch:
Jetzt kannst du erneut die SQL-Abfrage vom Anfang benutzen, um zu sehen, ob deine Änderungen auch erfolgreich waren:
Prüfe jetzt deine WordPress Umgebung und die Artikel, ob dir Fehler auffallen oder dir sonstige Probleme begegnen. Du hast natürlich dein Backup, welches du ansonsten zurückspielen könntest! 😉
Falls du diesen Artikel nur aus Interesse gelesen hast, und dein letzter Blick in deine error.logs schon länger her ist, ist dies hier vielleicht eine Erinnerung dort mal wieder nachzuschauen. Und wer weiß, vielleicht steht auch bei dir etwas von “Illegal mix of collations” 😉
Ansonsten hoffe ich natürlich, dass ich dir ein wenig mit diesem Artikel helfen konnte.
FAQ´s
Dieser Fehler tritt auf, wenn zwei Tabellen in der WordPress-Datenbank mit unterschiedlichen Kollationen miteinander verglichen werden sollen. Die Kollation einer Datenbank bestimmt, wie Zeichen interpretiert und sortiert werden. Wenn Tabellen unterschiedliche Kollationen haben, kann dies zu Inkonsistenzen und Fehlern führen.
Du kannst SQL-Abfragen in Tools, wie phpMyAdmin verwenden, um die Kollationen der Tabellen in deiner Datenbank anzuzeigen. Du kannst unter anderem den folgenden Befehl verwenden:
SELECT table_name, table_collation FROM information_schema.tables WHERE TABLE_SCHEMA = 'NAME-DEINER-DATENBANK';
Es wird empfohlen, die Kollation utf8mb4_unicode_520_ci
zu verwenden, da diese von WordPress unterstützt wird und eine gute Unicode-Unterstützung bietet.
Ja, Änderungen an der Kollation können potenziell zu Datenverlust oder Inkonsistenzen führen. Daher ist es wichtig, vor dem Durchführen von Änderungen ein Backup deiner Datenbank zu erstellen und Änderungen sorgfältig zu planen.
Natürlich! Über eine entsprechende Patreon-Mitgliedschaft biete ich dir einen exklusiven und persönlichen Zugang in Discord an.
Hier stehe ich dir dann für deine Fragen zur Verfügung.
Gerne können wir auch in einem Discord-Call direkt an deinem PC alles Schritt für Schritt durchgehen.
Wenn du also detaillierte Einblicke in meine Blog-Reihe “Snippets aus der Praxis” oder spezifische Fragen zu WordPress, Webentwicklung oder anderen Themen hast, stehe ich dir über die entsprechende Patreon-Mitgliedschaft persönlich zur Verfügung.
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.