Agentur für Neue Medien


Doppelt UTF-8-kodierte Daten in TYPO3 korrigieren

Wenn z.B. beim Umzug einer TYPO3-Installation auf einen anderen Server plötzlich die Umlaute und Sonderzeichen falsch dargestellt werden, obwohl man alles auf UTF-8 eingestellt hat, kann das daran liegen, dass bei der bisherigen Installation die Daten doppelt nach UTF-8 konvertiert wurden. Dazu muss man wissen, dass es 3 Stellen gibt, an denen der gewählte Zeichensatz eine wichtige Rolle spielt: 1. die Datenbank, 2. TYPO3 selber und 3. die Kommunikation zwischen TYPO3 und der Datenbank!
Hat man nun die Datenbank und TYPO3 (['forceCharset'] = "utf8") auf UTF-8 umgestellt, aber im Install-Tool in das Feld ['setDBinit'] nicht "SET NAMES utf8" eingetragen, so erfolgt häufig standardmäßig die Kommunikation zwischen Datenbank und TYPO3 im Zeichensatz ISO 8859-1 (Latin1), was dazu führt, dass die Daten doppelt in UTF-8 konvertiert werden. So lange man das System so beläßt, funktioniert auch alles problemlos. Wird dann die TYPO3-Installation jedoch auf einen neuen Server umgezogen, bei dem die Kommunikation mit UTF-8 erfolgt, werden Umlaute und Sonderzeichen nicht mehr korrekt dargestellt.

Um herauszufinden, welcher Zeichensatz wo verwendet wird, kann man auch einfach die Extension sm_charsethelper installieren. Diese fügt dann unter "Berichte" einen neuen Bericht hinzu, in dem genau aufgelistet wird, an welcher Stelle, welcher Zeichensatz verwendet wird.

Im Folgenden werden die möglichen Kombinationen von Einstellungen aufgelistet und angegeben, welche Codierung man erhält, wenn man mit mysqldump (ohne weitere Parameter) ein Backup der Datenbank erstellt:

Fall: TYPO3: Verbindung: Datenbank: mysqldump Ergebnis:
1. Latin1 Latin1 Latin1 OK: Latin1
2. Latin1 Latin1 UTF-8 OK: UTF-8
3. Latin1 UTF-8 Latin1 nicht möglich, sofern Umlaute verwendet werden
4. Latin1 UTF-8 UTF-8 nicht möglich, sofern Umlaute verwendet werden
5. UTF-8 Latin1 Latin1 durchgängig UTF-8-kodierte Daten in Latin1-Datenbank
6. UTF-8 Latin1 UTF-8 doppelt UTF-8-kodierte Daten in Datenbank
7. UTF-8 UTF-8 Latin1 OK: Latin1
8. UTF-8 UTF-8 UTF-8 OK: UTF-8

Will man nun einen korrekt in UTF-8 kodierten Datenbank-Dump erstellen, muss man die folgenden Fälle unterscheiden und ggf. zusätzliche Parameter angeben:

Fall 5.: UTF-8-kodierten Daten in der Latin1-Datenbank

mysqldump -u USER -p --default-character-set=latin1 datenbank_name > datenbank_name.sql

Fall 6.: Doppelt UTF-8-kodierten Daten

mysqldump -u USER -p --default-character-set=latin1 datenbank_name > datenbank_name.sql

In allen anderen Fällen:

mysqldump -u USER -p datenbank_name > datenbank_name.sql

 

Leider schreibt mysqldump den verwendeten Zeichensatz, ebenso wie den Zeichensatz der Datenbank, mit in die Dump-Datei hinein. Daher müssen innerhalb der Dump-Datei alle Vorkommen von "latin1" nach "utf8" von Hand abgeändert werden. Mit vi geht das z.B. ganz einfach mit folgendem Befehl:

:%s/latin1/utf8/

 

Der so erstellte und korrigierte Datenbank-Dump sollte sich dann ohne Probleme in das neue System einlesen lassen.

comments powered by Disqus

Copyright SKom 2006

Ecke rechts unten