Alex: Umstellung auf UTF-8

Hi,

habe nicht wirklich Ahnung von diesen ganzen Zeichenkodierungen und -sätzen, kann sein, dass ich hier jetzt den totalen DAU-Mist poste.  Jedenfalls stelle ich gerade meine Webseite auf UTF-8 um, weil ich davon weiß, das es irgendwie cool ist.

In der MySQL-Datenbank sind die Daten seit jeher in "latin1_swedish_ci" abgespeichert, war wohl so voreingestellt. Kein Problem, denn es gibt ja bei PHP diese utf8_encode-Funktion. Aber ich wollte mal ganz professionell sein und in phpMyAdmin in der Gästebuch-Tabelle die ganzen Felder mit dem Zeichensatz "utf8_general_ci" kodieren. Also da bei "Kollation". Das hat offenbar auch funktioniert.

Jetzt wäre mein Gedanke gewesen: Es müssten doch nun eigentlich auf meiner Gästebuch-HTML-Seite (charset=iso-8859-1) alle Umlaute _falsch_ angezeigt werden. Mit so Fragezeichen in einer Raute beispielsweise. Die Frage ist jetzt: Warum sind nach der Umwandlung immer noch alle Umlaute erkennbar?

Werden mit der Umstellung bei "Kollation" nicht die ganzen gespeicherten Daten in UTF8 umgewandelt? Wenn nein, was muss ich bei phpMyAdmin tun, damit eben dies geschieht?

Gruß
Alex

  1. echo $begrüßung;

    In der MySQL-Datenbank sind die Daten seit jeher in "latin1_swedish_ci" abgespeichert, war wohl so voreingestellt. [...]
    Werden mit der Umstellung bei "Kollation" nicht die ganzen gespeicherten Daten in UTF8 umgewandelt?

    Das werden sie.

    Jetzt wäre mein Gedanke gewesen: Es müssten doch nun eigentlich auf meiner Gästebuch-HTML-Seite (charset=iso-8859-1) alle Umlaute _falsch_ angezeigt werden. Mit so Fragezeichen in einer Raute beispielsweise. Die Frage ist jetzt: Warum sind nach der Umwandlung immer noch alle Umlaute erkennbar?

    Ich nehme an, es wurde seitens des Administrators eine Einstellung zur auf den Client-Verbindungen zu verwendenden Default-Kodierung getroffen, die "latin1" heißt. Schau dir die "MySQL-Systemvariablen" zu den Werten character-set-client, character-set-connection und character-set-results an. Wenn vorhanden dann den Eintrag in der Zeile "Globaler Wert", die anderen gelten dann nur für die aktuelle phpMyAdmin-Verbindung. Auch unter init-connect kann eine Voreinstellung stehen.

    Wenn du nun mit dem MySQL-Server UTF-8 sprechen möchtest, solltest du ihm dies explizit mitteilen. Für PHP mit der mysql-Extension gibt es nur SET NAMES utf8 als Befehl direkt nach dem Verbindungsaufbau. Für mysqli gibt es eine eigene Funktion bzw. Methode zur Kodierungseinstellung.

    Ansonsten hält das MySQL-Handbuch ein eigenens Hauptkapitel für dieses umfangreiche Thema bereit: Character Set Support.

    echo "$verabschiedung $name";