[TYPO3-german] TYPO3 und Charset-Chaos

Peter Linzenkirchner liste at lisardo.de
Fri May 14 18:58:31 CEST 2010


Hallo Raphael,

> Die Datenbank (MySQL 5)ist komplett auf utf8 eingestellt  
> (character_set_client, character_set_connection,  
> character_set_database) und im Installtool steht '[BE][forceCharset]  
> = utf-8' aktiviert.

Das ist richtig. Entscheidend ist m. W. nicht nur die Kollation der  
Datenbank sondern auch die Kollation der Datenbankverbindung.  
Standardmäßig ist die Kollation der Datenbankverbindung eben nicht  
automatisch UTF-8, sondern erst dann, wenn man diese mit set names  
utf-8 erzwingt. Das ist kein Problem von TYOPO3 sondern ein Problem  
von PHP und MySQL und wird erst seit MySQL 5 wirklich zum Problem.  
Deshalb wurde in den Versionen von TYPO3 > 4.0 auch die Option set  
names eingeführt.

Das ganze wird noch dadurch kompliziert, dass nicht nur beim Schreiben  
durch TYPO3 die Kollation der DB-Verbindung beachtet werden muss,  
sondern auch beim Erstellen des Dump. Wenn du den Export z. B. mit  
einer neuen Version von phpMyAdmin vornimmst, so wird per Default der  
Dump mit set names utf-8 erstellt, was MySQL veranlasst, UTF-8-Dateien  
zu liefern. Heisst, der Dump von phpMyAdmin ist in jedem Fall UTF-8,  
ausser du stellst die Datenbankverbindung in phpMyAdmin absichtlich um  
auf latin.

Mit anderen Worten: MySQL konvertiert selbstständig die Daten, die es  
bekommt und liefert, und zwar abhängig von der Kollation der  
Datenbankverbindung.

> Was mich jetzt allerdings brennend interessiert:
> a) wie werden die Eingaben aus dem Backend tatsächlich kodiert, wenn  
> forceCharset auf utf-8 gesetzt ist und setDBinit keine Anweisung  
> enthält?

Das hängt m. W. von der Konfiguration von MySQL und/oder PHP ab, kann  
also auf jedem System anders aussehen. Aber m. W. werden in der Regel  
dann utf-8 Daten über eine latin-DB-Verbindung gesendet, was dazu  
führt, dass in der DB die utf-8-Zeichen in latin gespeichert werden.  
Das kann man schön sehen, wenn man mit phpMyAdmin drauf geht und dort  
fehlerhafte Zeichen sieht, während TYPO3 korrektes utf-8 ausliefert.

> Nachdem ich nach zahlreichen Tests definitiv ausschliessen kann,  
> dass der Dump fehlerhaft ist, konnte ich den Verursacher  
> mittlerweile auf TYPO3 eingrenzen.


Ist er das? Welchen Zeichensatz hast du im Dump tatsächlich? Öffnen  
mit einem Texteditor und nachschauen ist die einzige Möglichkeit das  
rauszufinden. Je nachdem, mit welcher Datenbankverbindung du den Dump  
erstellst, erhältst du Latin oder utf-8 im Dump, und zwar unabhängig  
davon, welche Daten in der Datenbank drin sind ... Auf der sicheren  
Seite ist man dann, wenn man bei _jeder_ Datenbankverbindung set names  
= utf8 verwendet, also auch dann, wenn der Dump erstellt und wieder  
eingespielt wird. Wenn du in einen Dump von phpMyAdmin reinschaust,  
wirst du ganz oben entsprechende Komentarzeilen finden, die die DB- 
Verbindung einstellen:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

> b) wie kann ich die verwurstete Datenbank wieder in korrektes UTF-8  
> zurückcodieren?

Normalerweise kein allzugroßes Problem, allerdings nur wenn die Daten  
nicht gemischt wurden - also wenn TYPO3 z. B. eine Zeit lang mit und  
ohne set names gearbeitet hat. Es gibt ja nur zwei Möglichkeiten: der  
Dump ist in utf-8 oder er ist in latin. Ensprechend kann man vorgehen:

- dump in utf-8:
Beim Zurückspielen in die DB darauf achten, dass die Verbindung auf  
set names = utf-8 steht. Danach in TYPO3 die beiden Einstellungen von  
oben vornehmen, dann müsste es klappen. So habe ich schon eine ganze  
Reihe von Installation von Latin auf utf-8 rübergezogen.

- dump in latin:
Konvertieren in utf-8 und dann wie oben.

Achtung: ein Problem waren bei mir Umlaute in den TypoScript- 
Templates, die leider dazu geführt haben, dass ab den Umlauten das  
restliche TypoScript gefehlt hat. Warum weiss ich nicht - bei mir kein  
großes Problem, da ich das TS eh extern halte. Wenn es jemand weiss,  
warum das passiert - bitte posten :-)

>
> Bin für jeden Vorschlag dankbar, da ich schon alleine für den Fall  
> ein funktionierendes Backups meine Datenbanken reparieren muss!

wie gesagt: du musst beim Erstellen und beim Zurückspielen des Dumps  
auf die korrekte Kollation achten.

Gruß
Peter





More information about the TYPO3-german mailing list