Typo3 DB konvertieren.

Vorgeschichte

Neulich stand ich vor dem Problem, dass eine alte Typo3 4.5 Installtion so langsam mal auf die nächste LTS, sprich 6.2 aktualisiert werden sollte. Eigentlich kein großes Thema: Alle Extensions, die notwendig waren sind inzwischen für 6.2 erschienen oder problemlos ersetzlich. Sollte also überhaupt kein Problem sein – dachte ich.

Nach Einrichtung einer Testumgebung, Backup, etc die üblichen Schritte beim Update:

# Symbolischen Link auf die neue Version setzen:
rm typo3_src && ln -s /usr/local/share/typo3/typo3_src-6.2.14

# Alte Temporärdateien löschen:
find typo3temp -type f -exec rm -fv \{\} \;

# Installtool frei schalten:
touch typo3conf/ENABLE_INSTALL_TOOL

Danach noch ein kurzer Check, und dann in die Produktiv-Umgebung übernehmen. Was soll schon schief gehen?

Einiges. Um genau zu sein, alle Umlaute usw. der Seite waren beim Teufel: Ã¶ statt ö, ä statt ä und so weiter. Klassischer Encoding Fehler halt.

Ursache

Ohne da jetzt genauer eingestiegen zu sein, habe ich die folgende Vermutung. Eventuell kann mir ja jemand mit mehr Ahnung widersprechen.

Offensichtlich kümmert sich Typo3 Version 4.5 nur darum, was in der eigenen Konfiguration steht, wenn es ums Encoding geht. Dort stand auch UTF8, wie es sich gehört. Nicht aber in der Datenbank, die war auf latin1 mit entsprechender (typisacher) Schwedischer Collation. Anfängerfehler beim Einrichten, der sich jetzt rächen sollte. Typo3 hat dann also UTF8-Strings in die DB geschoben, die hat sie (eigentlich kaputt) abgespeichert und genau so auch wieder an Typo3 zurück geliefert. Das hat alles wieder als UTF8 interpretiert, und alles war schön.

Mit Typo3 6.2 scheint sich das CMS dann aber plötzlich dafür zu interessieren, was für ein Encoding die Datenbank verwendet und richtet sich dann danach. Und schon sind die Daten kaputt. Schöner Mist!

Lösung

Nach einigem googleln und verschiedenen Ansätzen mit mehr oder weniger SQL-Magie, komplizierten iconv Aufrufen usw. bin ich mit den folgenden Befehlen recht einfach zu einer funktionierenden Datenbank gekommen:

# Export der Altdaten:
mysqldump -u root -p --default-character-set=latin1 typo3_db > export

# kopieren der Daten, um ggf. eine Sicherheitskopie zu haben, 
# falls es doch nicht klappt:
cp export import

# Suchen / ersetzen der Datenbankparameter im Export:
sed -i 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/g' import
sed -i 's/CHARACTER SET latin1/CHARACTER SET utf8/g' import
sed -i 's/SET NAMES latin1/SET NAMES utf8/g' import

# Reimport in die Datenbank:
mysql --default-character-set=utf8 -u root -p typo3_db < import

Zumindest bei mir war danach alles im grünen Bereich, und ich konnte die Seite wieder produktiv stellen. Vielleicht hilft es ja mal jemandem, der auch zu spät dran ist, seine Umgebung mal zu aktualisieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert