[TYPO3-german] UTF8

Peter Linzenkirchner liste at lisardo.de
Fri Feb 25 22:17:09 CET 2011


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 at 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



More information about the TYPO3-german mailing list