dedlfix: Codierung (Charset UTF-8)

Beitrag lesen

echo $begrüßung;

Bitte zitiere sinnvoll, nicht einfach alles.

Neue Tabelle mit einem Varchar-Feld - latin1_general_ci codiert. Eintrag mit Sonderzeichen ä gemacht. Umgestellt auf utf8_general_ci und es ist noch immer das ä zu sehen und nicht wie erwartet ä.

Womit hast du das gemacht? Mit dem phpMyAdmin? Dann war alles in bester Ordnung. Wenn du ä sähest, dann wäre was verkehrt. Du bekommst mit dem PMA die Bytes, die MySQL intern zur Speicherung verwendet, nicht zu sehen. Als Client interessiert dich erst einmal nur die Kodierung, die auf deiner Verbindung verwendet wird. MySQL nimmt die Daten in dieser Kodierung entgegen, wandelt sie gegebenenfalls um, um sie mit der für die Felder angegebenen Kodierung dort zu speichern. Beim Auslesen wandelt es ebenfalls um, in die Kodierung, die der auslesende Client ausgehandelt hat. (Ich hab das mal vereinfacht dargestellt. Das genaue Prozedere ist im Kapitel Connection Character Sets and Collations zu finden.)

Der PMA spricht mit dem MySQL-Server UTF-8. Er sendet UTF-8, und interpretiert das was von MySQL kommt ebenfalls als UTF-8. Er schickt das als UTF-8 deklariert weiter zum Browser, der interpretiert die Bytefolge als UTF-8-kodiertes ä und malt ein solches auf den Schirm. Als das Feld noch Latin1-kodiert war, hat MySQL beim Auslesen das Latin1-kodierte ä in UTF-8 umkodiert und es dem PMA gesendet. Beim Umstellen der Feldkodierung auf UTF-8 hat MySQL den Inhalt nach UTF-8 umkodiert, und beim Auslesen reicht er es nun einfach ohne Umwandlung an den PMA durch.
Du siehst erst dann wieder ein ä, wenn du die UTF-8-Bytefolge als Latin1/ISO-8859-1/Win-1252 zu interpretieren versuchst.

echo "$verabschiedung $name";