MySQL Character Encodings updaten

Kleines Update, maximales Chaos: Im Emerge-System von Gentoo-Linux wurde in der letzten Woche das MySQL-Ebuild-Package upgedatet, und zwar eher unscheinbar von Version 4.1.14 auf 4.1.14-r1.

Erste Hürde: der MySQL-Server wollte nicht mehr starten, das mysqld.err-Logfile verriet als Grund:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 8388608 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
060418 14:38:48 [ERROR] Can't init databases
060418 14:38:48 [ERROR] Aborting

Was das schief lief, kann ich nicht sagen, die Dateien ib_logfile0 und ib_logfile1 im MySQL-datadir zu löschen (bzw. nach /tmp zu verschieben) und MySQL neu zu starten war aber eine Lösung.

Mit im Gepäck hatte die neue Version dann aber eine grundsätzliche Andersbehandlung der Character-Encodings der Tabellen. Speziell wurden offensichtlich alle Tabellen-Daten UTF-8-kodiert ausgeliefert, auch wenn die Tabellen ISO-8859-1-encodet angelegt waren.

Und speziell wurden die Daten in allen WordPress-Installationen auf dem Server, die UTF-8-kodiert in ISO-8859-1-kodierten (oder unspezifiziert kodiert weil alten?) Tabellen lagen, nochmals quasi von ISO-8859-1 nach UTF-8 umgewandelt, was dann zerschossene Umlaute im Weblog zur Folge hatte.

Abhilfe schaffte hier nur ein Reimport aller Datenbank-Daten:

  1. Dump der Daten, wobei das default-character-set, dem in der Datenbank verwendeten Charset anzupassen ist (latin1 oder latin1) z.B.:
    mysqldump -u root -p --extended-insert=false --default-character-set=latin1 datenbankname > ~/datenbankname.sql
  2. Das Dump-File in einem Texteditor mit dem ensprechenden Encoding öffnen und als UTF-8 abspeichern.
  3. Im Dump-File zuerst alles Collations mit Suchen und Ersetzen von z.B. latin1_german1_ci auf latin1_general_ci umstellen, und dann alle Charset von latin1 auf latin1 umstellen.
  4. Die Daten Reimportieren:
    mysql -u root -p datenbankname < ~/datenbankname.sql

Danach sind dann alle MySQL-Tabellen intern und auch alle Daten auf UTF-8, und die Darstellung wieder korrekt. Und hoffentlich bleibt man von zukünftigem Chaos dieser Art verschont. Keine Problem hatten übrigens meine Gallery– und ein Testwiki auf dem Server, da hier die Tabellen von den jeweiligen Webapplikationen schon explitzit in UTF-8 angelegt worden waren, hier sollte WordPress vielleicht mal nachziehen, wenn die als Default-Charset schon UTF-8 benutzen.

Besonders ärgerlich: Insgesamt ist es aber schon der zweite größere Ausfall wegen eines Datenbank-Updates, der unerwartet einige Nerven gekostet hat. Kann man da nicht mal vorher gewarnt werden?

Eine Antwort Subscribe to comments


  1. Dadabase.de » Allgemeine Befindlichkeit

    […] funktionieren einwandfrei. Muß ich mir mal anschauen. 24. April 2006, 17:12 In: persönliches Kommentar-Feed (RSS 2.0) Johannes ? […]

    24.04.2006 @ 17:12


Archiv
Kategorien
Suche