Hallo Marco, 

Es spielen mehrere Komponenten eine Rolle: die Kollation der Datentabelle und 
die Kollation der Datenverbindung. Wenn die Datentabelle auf utf8 kollationiert 
ist und TYPO3 auf forceCharset=utf8, die Datenbankverbindung aber auf latin, so 
liefert TYPO3 utf8, die MySQL glaubt aber, es bekommt latin und kodiert 
nachmals nach utf8. Rückwärts läuft der gleiche Prozess ab. Wenn du jetzt die 
Kollation der Verbindung umstellst, funktioniert es nicht mehr. 

In phpMyAdmin siehst du die Zeichen deshalb auch unterschiedlich. Je nachdem, 
welche Version von phpMyAdmin du verwendest, greift dieses standardmäßig mit 
einer latin- oder einer utf-8 Verbindung auf die DB zu (in den neueren 
Versionen kann man das auch umstellen). Greifst du also mit einer 
Latin-Verbindung auf eine UTF8-kodierte Tabelle zu, so siehst du falsche 
Zeichen, wenn du dagegen mit einer utf8-Verbindung auf eine latin-Tabelle 
zugreifst, siehst du auch falsche Zeichen, aber anders falsch ... 

Der Artikel hier erklärt dir die Grundlagen: 

http://www.gerd-riesselmann.de/softwareentwicklung/php-und-utf-8-eine-anleitung-teil-1-mysql

Ich zitiere ihn mal: 

Sofern diese [Kodierung der Datenverbindung] nicht manuell angepasst worden ist 
(was selten passiert) ist das Latin1 mit der Sortierung „Schwedisch“!

Dröseln wir jetzt mal auf, was da genau passiert ist:

        • Wir sind auf einem Linux-System mit UTF-8 als Zeichensatz. Die 
Eingabe „üüü“ wird daher in die ANSI-Zeichen „üüü“ umgesetzt.
        • Der MySQL-Client erwartet Latin1, liest also nicht „üüü“, sondern 
eben „üüü“.
        • Und dies schickt er auch an den Server, und zwar mit der Anmerkung, 
es handele sich hier um Daten im Format Latin1.
        • Der Server wiederum weiß, dass die Tabelle UTF-8 benutzt und 
konvertiert entsprechend die ankommenden Daten von Latin1 nach UTF-8. Er 
speichert also nicht ein UTF-8-"ü", sondern UTF-8-„üüü“
        • Wir fragen die Tabelle ab und verlangen dabei das Format Latin1.
        • Der Server gibt uns die Daten zurück, konvertiert aber vorher von 
UTF-8 nach Latin1, weil der Client das so wollte.
        • Der Client erhält „üüü“ als ANSI und druckt das aus.
        • „üüü“ werden auf dem Bildschirm als „üüü“ angezeigt.

Wehe, wenn du jetzt die Kodierung der Datenverbindung umstellst auf utf8 (was 
Version 4.5 m. W. tut). 

Deshalb reicht es nicht, nur forceCharset einzugeben (und ist oft sogar der 
falsche Weg). Du musst vor allem darauf achten, dass die Verbindung zur 
Datenbank in utf8 aufgebaut wird, und das passiert mit setDBinit = 'SET NAMES 
utf8'. Oder auch so: 

$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET CHARACTER SET utf8;'.chr(10).'SET 
NAMES utf8;'.chr(10).'SET SESSION character_set_server=utf8;';

Hier drin ist das auch gut erklärt: 

http://www.mail-archive.com/typo3-german@lists.netfielders.de/msg29438.html 
(der ganze Thread). 

Im Artikel von riesselmann findest du eine Möglichkeit, wie du prüfen kannst, 
welche Kodierung tatsächlich in den Tabellen drin ist. Möglicherweise musst du 
den Content auch erst konvertieren. Vielleicht reicht es auch, die Verbindung 
explizit mit setDBinit = 'SET NAMES latin' auf latin zu setzen. 

Gruß
Peter





Am 25.02.2011 um 18:45 schrieb Marco Polo:

> 
>> Nein eher anders herum... in der DB sind die Zeichen nicht in UTF-8
>> gespeichert, aber als UTF-8 markiert. Deswegen kommt auch das BE
>> durcheinander. Force-charset sollte eigentlich immer gesetzt auf utf-8 sein.
>> 
>> Viele Grüße
> aha, das heißt über phpMyAdmin sieht eine Utft-8 DB immer kaputt aus ? und 
> wie verstehe ich dann das:
> "mit Umlauten im Namen versehen und dann schauen, ob in phpMyAdmin diese 
> Umlaute
> genauso angezeigt werden, wie sie sein sollten. Steht dann anstatt Müller 
> dort Müller, dann ist vermutlich bei
> setDBinit der Fehler zu suchen" 
> (http://www.oliver-thiele.de/cms-typo3/tutorials/typo3-mysql-utf8-umstellung.html#c158)
> 
> Deutsche Umlaute zb funktionieren einwandfrei. Es fehlen halt nur einige 
> Zeichen im Frontend  (siehe erste Mail). Im Backend sieht ebenfalls alles 
> richtig aus.
> 
> Zu Force Charset lese ich folgendes im Install Tool: "This option is 
> deprecated since TYPO3 4.5, and will be removed in 4.7. Please use proper 
> tools to set your installation to native UTF-8."
> 
> Herzlichen Dank.
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german@lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

--
Xing: http://www.xing.com/profile/Peter_Linzenkirchner
Web: http://www.typo3-lisardo.de
Facebook: http://tinyurl.com/lisardo-multimedia

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an