TYPO3: Datenbank umstellen von Latin-1 auf UTF-8

|
Mitarbeiter sitzen mit Laptops im Schulungsraum. Der Schulungsleiter hilft einem Mitarbeiter

Die Kodierung UTF-8 ist heute standardmäßig bei einer Installation von TYPO3 eingestellt, doch vor gar nicht allzu langer Zeit bestimmte ein anderer Code die Zeichendarstellung auf Webseiten: ISO/IEC 8859-1, alias Latin-1. Wie Sie eine alte TYPO3-Installation von Latin-1 auf UTF-8 umstellen können, beschreiben wir im heutigen Blog-Beitrag.

Speicherplatz war vor einigen Jahren noch sehr knapp bemessen, darum wurden nur die für die Besucher relevanten Zeichen zur Verfügung gestellt. Latin-1 stellt dabei Zeichen des westeuropäischen Raums dar, während Latin-3 z. B. für südeuropäische Sprache erstellt wurde.

Da aber die Bedeutung von Mehrsprachigkeit auf Internetseiten bis heute immer mehr zugenommen hat, und Betreiber zum Teil gleichzeitig Chinesisch und Arabisch abbilden müssen, werden Zeichen inzwischen mit UTF-8 (Abkürzung für 8-bit UCS Transformation Format) kodiert, welches bis zu 4 Byte unterstützt und somit alle unterschiedlichen Zeichen der verschiedenen Sprachen darstellen kann.

Doch was ist zu tun, wenn eine alte TYPO3-Installation nach mehrjähriger Laufzeit um Mehrsprachigkeit ergänzt werden soll? Liegen die Datenbanktabellen hier im Latin-Charset vor, kommt es zu Anzeigefehlern im ausländischen Zeichensatz.

typo3 schulungen
Mittwald Werbebanner zu Schulungen mit grüner Fläche und Foto von Mittwäldern

Zwar gibt es für TYPO3 Extensions, welche eine Konvertierung der Tabellen durchführen, oftmals werden hier jedoch nur bestimmte Tabellen umgestellt, was im Nachhinein zu Problemen führen kann. Wie Ihr die Datenbank selbst umstellen könnt, erfahrt Ihr in der folgenden Beschreibung. Für diesen Vorgang ist es von großem Vorteil, wenn ein SSH-Client vorliegt, damit Ihr Zugriff auf einige Shell-Befehle habt. Bei Fragen zur Umstellung könnt Ihr euch natürlich gerne im Mittwald Kundenservice melden! :-)

So funktioniert's:

1. Einen Dump erstellen

Zur Sicherheit sollte ein Datenbank-Dump erstellt werden. Dies funktioniert bei MySQL so:

mysqldump --opt -Q -u USER -p PASSWORT -h HOST DB > dump.sql

Natürlich müsst Ihr hier USER, PASSWORT und HOST und DB durch Eure Daten ersetzen. Wird der Kompatibilitätsmodus nicht benutzt, muss im Dump noch das Charset und die Kollation angepasst werden.

2. Konvertieren

Nun wird der Dump nach UTF-8 konvertiert. An dieser Stelle ist es ratsam, den Dump als Backup an eine sichere Stelle zu kopieren, denn es ist nie völlig auszuschließen, dass vielleicht etwas missglückt. Jetzt muss auf der Linux-Shell folgendes eingegeben werden:

iconv -f iso-8859-1 -t utf8 dump.sql > dump-iconv.sql

3. TYPO3-Einstellungen

Falls Ihr einen anderen Zeichensatz als ISO 8859-1 (Latin-1) verwendet habt, müsst Ihr die Angabe hinter  „-f“ selbstverständlich anpassen. Bevor Ihr den erstellten Dump sichert, müsst Ihr in TYPO3 Einträge im Install-Tool vornehmen. Ihr könnt aber auch im Ordner „typo3conf“ die Datei „localconf.php“ um zwei Zeilen ergänzen und im Anschluss die „temp_CACHED_*“-Dateien löschen:

$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8;';
$TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';

Nun wird von TYPO3 für die Ausgabe im Front- und Backend bereits UTF-8 verwendet. Erst jetzt sollten Sie den umgewandelten Dump zurückspielen:

mysql -u USER -p PASSWORT -h HOST
--default-character-set=utf8 DB < dump-iconv.sql

Auf diese Weise verhindert Ihr, dass versehentlich zwei verschiedene Zeichensätze in der Datenbank existieren. Der Befehl „–default-character-set=UTF8“ teilt MySQL mit, dass die Daten bereits im UTF-8 Format vorliegen. Liegt diese Angabe nicht vor, werden aus „ü“, „ö“ und „ä“ interessant aussehende Zeichenkombinationen: „ü“,  „ö“, „ä“.

4. Daten prüfen

Ob alles geklappt hat, könnt Ihr schnell feststellen, wenn Ihr die Umlaute prüft. Auch mit dem MySQL-Query-Browser könnt Ihr prüfen, ob alles korrekt angezeigt wird.

5. Ausgabe prüfen

Ganz am Schluss solltet Ihr auf jeden Fall noch einmal sorgfältig die Ausgabe der Webseite prüfen.

Kommentare

Marius am

Vielen Dank für die Anleitung, hab sonst immer erst die DB gelöscht und mit UTF8 neu erstellt, was überhaupt nicht funktioniert hat. Endlich läufts!

Kristina Dahl am

Hallo Herr Kunig,

können Sie sich bitte einmal per Ticket melden und uns mitteilen, um welchen Account es sich handelt? Dann können wir konkret prüfen, woran es liegt.

Vielen Dank und viele Grüße

Kristina Dahl

Kurt Kunig am

1.) Wenn ich mit Putty den mysqldump absetze bekomme ich eine Fehlermeldung – keine Berechtigung!? – In welchem Pfad muss ich den Befehl absetzen?
2.) Diese Ext. convert2utf8 habe ich auch mal installiert, sehe aber den Aufruf nirgends!? (Habe TYPO3 V4.5 im Einsatz!)

Stefano am

Im iconv Aufruf ist ein Fehler drin. Richtig sollte sein:
iconv -f iso-8859-1 -t utf-8 dump.sql > dump-iconv.sql

(utf-8 anstelle utf8)

Beste Grüße
Stefano

Paulina | SiteGefühl am

Super Anleitung, danke! Mit meinem Terminal (Mac) und Mittwald hat der erste Befehl aber nur so funktioniert (ohne Leerzeichen zwischen Host, Passwort und User).

mysqldump –opt -Q -uUSER -pPASSWORT -hHOST DB > dump.sql

Kristina Dahl am

@franc

Du kannst natürlich den Editor deiner Wahl verwenden, um eine solche Konvertierung durchzuführen, hier besteht kein Problem.

Von der Extension convert2utf8_1.0.6.t3x raten wir jedoch generell ab, da nicht sichergestellt werden kann, dass auch wirklich jede Tabelle konvertiert wird.

franc am

Ich habe es auf meinem Ubuntu LTS 8.04 Server mit MySQL 5.0.51 (und PHP 5.2.4-2ubuntu5.14) anders gemacht, mit MySQL Query Browser 1.2.17 (über SSH-Tunnel direkt auf der Typo3-DB, kann man aber sicher auch nur mit phphMyAdmin machen), EditPadPro7 (kann utf8 encoding, wie jeder heutige richtige Editor) und phpMyAdmin 3.2.2:

-die Typo3 Extension convert2utf8_1.0.6.t3x installiert

-mit phpMyAdmin die Seite komplett exportiert (gesichert) in mysite.sql (Text file character encoding: utf8)

-in mysite.sql nach „character set latin1“ gesucht und mit „character set utf8“ ersetzt. Unter mysite-utf8.sql gespeichert (Text file character encoding: utf8)

-mit Hilfe der oben genannten Extension alles auf utf8 umgestellt, also im Kontextmenü der Wurzelseite auf „Convert to UTF-8“ geklickt und dort dann alles markiert. Jetzt sind auf der Seite alle Umlaute verhagelt.

-die korrigierte Sicherung mysite-utf8.sql mit dem MySQL Query Browser zurückgespielt, das dürfte aber auch mit phpMyAdmin funktionieren. Jetzt sind alle Umlaute wieder da und alle Felder sind auf utf8 gesetzt.

Die Collation habe ich nicht gesetzt, die wird anscheinend automatisch gesetzt, wenn man im SQL nur das „character set utf8“ mitgibt.

franc am

Kann ich statt iconv auch einen beliebigen Editor nehmen, der mir latin1 in utf8 konvertieren kann (z.B.) EditPadPro?