Bei der Migration einer MySQL Datenbank gab es ein merkwürdiges Phänomen: Nach dem Import der Daten von einem Server auf einen Ubuntu Lucid Server wurden die Daten falsch angezeigt. Es sah aus, als wenn sie base64 codiert wären, oder ein esoterisches Encoding Problem zugeschlagen hätte.

Die Vermutung lag nahe, dass entweder der Dump (mittels mysqldump erzeugt) defekt war, oder falsch importiert wurde. (Der Import wurde über den mysql Kommandozeilen Client gemacht, MySQL lag auf beiden Systemen in der Ubuntu Lucid Version 5.1.41 vor.). Das Thema MySQL, Encoding, Collation und Charset kann sich dabei als sehr verwirrend herausstellen.So sahen die Daten im phpmyadmin auf dem neuen Ubuntu Server aus:

Auf dem ursprünglichen Server standen hier lesbare Text. (Erst später sollte ich feststellen dass zwar die MySQL Datenbank auf beiden Systemen gleich war – nicht jedoch PHPMyAdmin: Auf dem ursprünglichen Server handelte es sich um ein PHPMyAdmin von der Projektseite, auf dem neuen Ubuntu System stammte sie aus dem Ubuntu Repository.)

Einen guten Überblick über Probleme mit Encodings im Zusammenhang mit MySQL gibt es hier: http://forge.mysql.com/wiki/How_to_Use_Charsets_and_Collations_Properly

Nun zur Lösung des Problems: Die Daten waren korrekt in der Datenbank, wie man sich mittels dem mysql client auch ansehen kann. Lediglich PHPMyAdmin stellte die Daten anders dar: Hex kodiert. Der Grund war, dass die Collation der Felder auf „utf8_bin“ gesetzt war, und das Ubuntu PHPMyAdmin offenbar standardmäßig die Option „Show binary content as HEX“ gesetzt hat. Typischer Fall von Verkettung unglücklicher Umstände.
Aendert man die Darstellungsoptionen oder setzt die (korrekte) Collation „utf_general_ci“ werden die Daten auch von PHPMyAdmin korrekt angezeigt.

Dies zeigt, wie wichtig es ist, die Collation korrekt zu setzen – und dies natuerlich passend zur Konfiguration der jeweiligen Anwendung, die mit den Daten arbeitet.