dedlfix: UTF-8 in MySQL

Beitrag lesen

echo $begrüßung;

Wenn ich in phpMyAdmin definiere dass eine Tabelle UTF8-Text enthält und sie dann auslese und im Browser ausgebe, werden die Sonderzeichen nicht oder falsch dargestellt.

MySQL 4.1 hat viele Stellen, an denen man an den Zeichensatz und Kollation betreffende Werte einstellen kann. Im Handbuch gibt es ein ganzes Kapitel, das sich damit beschäftigt: Chapter 10. Character Set Support.

Da wären als erstes globale Servereinstellungen, die die Default-Einstellungen für Client-Befehle, String-Literale ohne character set introducer[*], Rückgabewerte, Datenbank und Server - und das alles einzeln - angeben. Diese my.ini-Parameter fangen alle mit character_set_ an. Daneben gibt es auch noch die Einstellungen für die collation_*-Werte. (Handbuch: 5.3.3. Server System Variables)

Als nächstes kann man jeder Datenbank, jeder Tabelle darin und für jedes einzelne (Char,Varchar,Text-)Feld eine Zeichensatz- und Kollationseinstellung vornehmen. Die ist allerdings nur intern zum Abspeichern relevant. Das was von und zu einem Client übertragen wird, wandelt MySQL von und in die für die jeweilige Verbindung gültige Kodierung. Diese kann man beispielsweise mit SET NAMES 'x' für alle drei sitzungsrelevanten Parameter (character_set_client, character_set_results, character_set_connection) ändern, wenn man die globale Default-Einstellung (siehe oben) nicht mag. (Handbuch: 10.3.6. Connection Character Sets and Collations)

echo "$verabschiedung $name";

[*] Ein character set introducer ist ein vor einem String vorangestelltes _utf8 oder _latin1 etc.
INSERT ... VALUES (_utf8'utf8-string', _latin1'latin1-String');