[TYPO3-german] Probleme nach Umstellung auf UTF-8

Peter Niederlag typo3-list at niekom.de
Wed Jun 15 13:46:25 CEST 2011


Hallo,

Am 14.06.2011 19:12, schrieb Frank Walter:
> Hallo Peter,
[...]
> Kann ich mir das so vorstellen: Typo3 reicht dem MySQL-Server ein
> UTF8-Zeichen (als UTF8-Zeichen) zum Speichern,

wenn forceCharset=utf-8 gesetzt ist: ja. Ansonsten der Zeichnesatz der 
Sprache des TYPO3-Backends.

> MySQL speichert es in
> einem latin1-Feld und wenn Typo3 das Zeichen wieder verlangt (als
> UTF8-Zeichen), dann gibt MySQL das Zeichen das intern als latin1
> gespeichert ist, wieder als das entsprechende UTF8 heraus? Demnach
> wäre ziemlich egal, was man für einen Zeichensatz einstellt, wenn das
> Feld nur groß genug bemessen ist?

Jein. das php-mysql module sagt per default, dass es in latin1 operiert. 
Damit "denkt" MySQL also die Daten *kommen* in latin1  und sollen auch 
als solche *zurückgegeben* werden. Dementsprechend  konvertiert MySQL, 
wenn es der bei einem Feld hinterlegte Zeichensatz erfordert.

setDBinit=set names utf8 ist der entsprechende Weg MySQL mitzuteilen, 
dass die Abfragen (entsprechend forceCharset, dem Zeichensatz mit dem 
TYPO3 arbeitet) im Zeichensatz utf8 erfolgen.

latin1-felder können prinzipiell nur Zeichen aus dem entsprechenden 
Zeichensatz handhaben, wenn man also wirklich irgendein Zeichen, was 
nicht in latin1 abzubilden ist(für alle europäischen Sprachen reicht 
latin1!) hat, dann sind latin1 felder ungeeignet.

> In der Tat ist das für mich noch ziemlich komplex, da kaue ich schon
> lange dran rum :)

[...]

Es ist halt leider auch nicht trivial, zumal es x-settings und ansätze 
zum aufräumen gibt.

Das allergefährlichste ist eine "halbgare" Umstellung, weil dann alles 
durcheinandergerät(alte und neue Kodierung).

Das Dumme ist, dass man früher oft forceCharset *ohne* setDBinit 
eingesetzt hat, was in 99% der Fälle früher oder später zu Problemen 
führt! Damit ist MySQL nämlich davon ausgegangen, dass latin1 verwendet 
wird, obwohl tatsächlich in TYPO3 utf8 verwendet wurde. Da sich der 
Fehler in solchen Fällen innerhalb von TYPO3 beim lesen und schreiben 
gegenseitig aufhebt, sieht innerhalb TYPO3 alles gut aus! ;)

Die erste Prüfung ist also:
"Habe ich forceCharset schonmal ohne setDBinit (oder andere 
entsprechende Massnahmen, auf die ich hier nicht eingehe) verwendet?"
Dann muss ich diesen Fehler nämlich reparieren...ansonsten gehen die 
üblichen Standardamassnahmen...

Ein guter Weg dass herauszufinden ist es mit einem TYPO3-unabhängigen 
phpmyadmin auf die DB zu schauen, wenn dort "krumme" Zeichen auftauchen 
ist das ein relativ sicheres Indiz für "something wrong"... ;)
(doppelt utf-8 in utf-8 Feld oder utf-8 in latin1-feld)

Diese Dnge sollte man zumindest im Hinterkopf haben, wenn man eine 
"historische" TYPO3-Installation anfasst, bei der forceCharset ohne 
setDBinit verwendet wurde/wird. ;)

Gruß,
Peter
-- 
Peter Niederlag
http://www.niekom.de * TYPO3 & EDV Dienstleistungen *


More information about the TYPO3-german mailing list