dedlfix: (utf-8?) Probleme mit einer MySQL Abfrage

Beitrag lesen

echo $begrüßung;

Das folgende habe ich noch zusäztlich zu
    > mysql_query("SET CHARACTER SET 'utf8'");
eingefügt und damit funktioniert es nun perfekt.

mysql_query("SET NAMES SET 'utf8'");

Ja, das hatte ich vermutet, dass es am SET CHARACTER SET liegt. Vermutlich steht auch character_set_database nicht auf utf8. Ein SET CHARACTER SET setzt im Gegensatz zu SET NAMES den Wert von character_set_connection auf den von character_set_database. Ein Statement wird nach seinem Empfang von character_set_client auf character_set_connection umkodiert. Dabei gehen prinzipbedingt die UTF-8-Zeichen verloren, die nicht in Latin1 enthalten sind, oder was auch immer der Wert von character_set_connection ist.

mysql_query("SET character_set_client = 'utf8'");
mysql_query("SET character_set_connection = 'utf8'");
mysql_query("SET character_set_results = 'utf8'");

Diese drei kannst du dir sparen, denn die Aufgabe von SET NAMES ist, alle drei auf den übergebenen Wert zu setzen. Auf SET CHARACTER SET kannst du auch verzichten, denn das arbeitet bis auf character_set_connection wie SET NAMES. Siehe MySQL-Handbuch Kapitel Connection Character Sets and Collations.

Außerdem gibt es in neueren Versionen von PHP (abgesehen vom schon länger existierenden mysqli) die Funktion mysql_set_charset(), die zum einen ohne Statement auskommt und zum anderen im Gegensatz zu SET NAMES auch mysql_real_escape_string() richtig arbeiten lässt. (Was aber keine Auswirkungen auf LatinX, ISO-8859-X und UTF-8 hat, da die von mysql_real_escape_string() behandelten Zeichen in diesen Kodierungen eindeutig sind. Eine asiatische Kodierung verwendet die Bytewerte dieser Zeichen auch in Bytekombinationen anderer Zeichen.)

echo "$verabschiedung $name";