PHP und UTF-8 - eine Anleitung, Exkurs: Wenn die DB durcheinander gerät
Manchmal kommt es vor, dass der Import von Daten in die DB fehlschlägt, und man trotz korrektem UTF-8 wieder mit verhunzten Umlauten zu tun hat. In diesem Fall kann die CONVERT-Funktion von MySQL in Verbindung mit BLOB-Spalten hilfreich sein.
Hier ist ein entsprechender Test-Case:
Dies erzeugt eine Tabelle, in dessen UTF-8-Spalte “content” eine nach UTF-8 konvertierte ANSI-Version von “Köln” steht:
id | content -------------------- 1 | Köln
Diese Spalte soll nun so konvertiert werden, sodass dort korrekt “Köln” steht.
Dazu wird nun zunächst einmal eine temporäre Spalte erzeugt, die den konvertierten Inhalt aufnimmt. Diese Spalte ist zunächst Latin1!
Nun konvertieren wir den verhunzten UTF-8-Inhalt zunächst einmal nach Latin1:
id | content | c ------------------------------ 1 | Köln | Köln
Die Spalte “c” enthält nun im Prinzip unser UTF-8 Ergebnis, wenn nur die einzelnen Bytes betrachtet werden. Es müsste nur der Zeichensatz geändert werden, ohne dabei eine Konvertierung durchzuführen.
Dies geht über den Umweg eines BLOB-Feldes:
id | content | c ------------------------------ 1 | Köln | Köln
Et voilá!