[TYPO3-german] setDBinit

Michael Stucki michael at typo3.org
Tue Feb 10 15:00:23 CET 2009


Hallo Peter,

> Leider ist das ein sehr weit verbreiteter Irrglaube!
> 
> ----------------------------------------------------------------
> Das MySQL-Modul von PHP benutzt IMMER latin1 als Zeichensatz für die
> Verbindung zw. PHP und MySQL!
> ----------------------------------------------------------------

Das wäre mir neu.

> D.h. MySQL rekodiert ggf. automatisch zw. dem Zeichensatz der Verbindung
> und der Datenbank. Da das sowohl bei der Abfrage, als auch beim
> Rückliefern des Ergebnis passiert, merkt man das innerhalb TYPO nicht!
> 
> Sobald jedoch eine andere Anwendung (phpmyadmin, o.a.) mit der Datenbank
> arbeitet fällt das Problem auf (Im übrigen auch bei einem Backup mit
> mysqldump).

Das wäre der Fall wenn man setDBinit nutzen würde, weil das nur von
TYPO3 genutzt würde. Aber wenn Server und PHP schon mit UTF-8 laufen
gibt's da keine Probleme.

> Merke: forceCharset immer nur zusammen mit setDBinit verwenden! Sonst
> gibt es
> a) doppelt UTF-8 kodierte Daten bei einer ut8-8 Datenbank
> oder
> b) UTF-8 kodierte Daten in einer Datenbank wo latin1 vorne draufsteht.

All das ist möglich, aber nicht die Regel.

Es ist möglich forceCharset ohne setDBinit zu verwenden wenn man vorher
sicherstellt dass der Server (MySQL), der Client (PHP) und die
Verbindung alle bereits mit dem gleichen Zeichensatz laufen.

Das geht am einfachsten so:

/etc/mysql/my.cnf, Abschnitt [mysqld]:

character-set-server = utf8
skip-character-set-client-handshake

Bedeutet:
- MySQL-Server läuft mit UTF-8
- ... und zwingt auch den Client dazu, das zu nutzen:

http://mysql.openmirrors.org/doc/refman/5.1/en/server-options.html:

# --character-set-client-handshake
# Don't ignore character set information sent by the client. To ignore
# client information and use the default server character set, use
# --skip-character-set-client-handshake; this makes MySQL behave like$
# MySQL 4.0.

> P.S.: es gibt noch eine alternative/analoge Lösung zu setDBinit für den
> Mysql-Server, die ich aber nicht empfehlen würde:
> #init-connect=SET NAMES `utf8`

Das würde vermutlich das gleiche tun wie obenstehende Konfiguration.
Warum würdest du das nicht empfehlen? Ist doch besser so, denn dadurch
wird die Änderung nicht nur von TYPO3 angewendet sondern auch von
externen Tools wie z.B. phpMyAdmin...

Liebe Grüsse
- michael
-- 
Use a newsreader! Check out
http://typo3.org/community/mailing-lists/use-a-news-reader/


More information about the TYPO3-german mailing list