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 *
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german