Viele alte Datenbestände die in MySQL Datenbanken schlummern sind noch immer Latin1 encodiert, das ist in Zeiten von UTF-8 allerdings ein Graus, zumal selbst PHP dies inzwischen unterstützt. Hat man also noch so eine Altlast herum zu liegen und will diese migrieren dann gibt es ein paar simple Schritte die man beachten sollte.
Zunächst geht es daran die Applikation UTF-8 tauglich zu machen. Als erstes müssen die Daten migriert werden, das geht mittels Iconv bei MySQL-Dumps ziemlich fix. Zuerst zieht man sich einen Dump von der betroffenen Datenbank:
mysqldump -u <user> -p --default-character-set=latin1 \<br></br>--skip-set-charset --add-drop-table <datenbank> > dump.sql
Als nächstes kommt die Konvertierung an die Reihe. Da MySQL-Dumps in der Regel reine Textdateien sind kann man mit einfachen Textwerkzeugen rangehen:
iconv -c -f latin1 -t utf-8 dump.sql \<br></br>| sed s/latin1/utf8/ > converted_dump.sql
Damit sollten alle Latin1 Zeichen in UTF-8 umgewandelt worden sein. Der Parameter -c sorgt dafür das bereits in UTF-8 vorliegende Zeichen einfach ignoriert werden. Abschließend wird der Dump nun wieder über die bestehende Datenbank gebügelt:
mysql -u <user> -p <datenbank> < converted_dump.sql
Soweit so gut, die Daten liegen jetzt korrekt in der Datenbank. Bleiben noch ein paar kleine Änderungen an der Applikation. So sollte man sicherstellen das sich nirgends mehr ein utf8_encode versteckt und das etwaige header die noch von ISO-8859 sprechen in UTF-8 geändert werden. Nicht vergessen sollte man das Characterset der Datenbankverbindung auf UTF-8 zu setzen. Dazu einfach einmalig SET NAMES ‘UTF8’ aufrufen, dann sollte alles wohl-encodiert über die Bühne gehen.