[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