Matt: MySQL Datenbank mit UTF8

Hallo Allerseits,

Ein Benutzer trägt mittels Absenden eines Formulars Daten in eine MySQL Datenbank ein. Der Server ist auf utf8 kodiert, das Dokument ist utf8 kodiert (und das Formular: accept-charset="utf-8") und MySQL ist auf utf8 kodiert (Variablen wie collation connection, character set connection, character set client, character set connection server).

Nun sendet ein Benutzer das Formular ab, in phpMyAdmin steht nun z.B. anstatt "Hänch" "Hänch". Auf der Ausgabeseite auf welcher ein Script die Daten aus der MySQL-DB abruft, wird es wieder korrekt dargestellt, lediglich phpMyAdmin stellt es falsch dar. Ändere ich mit phpMyAdmin nun "Hänch" in "Hänch", stellt er mir es richtig dar, auf der Ausgabeseite ist jedoch das bekannt komische dicke Zeichen, was die Seite unbrauchbar macht.

Hat jemand eine Idee was phpMyAdmin da falsch versteht oder ob ich die SQL Query bzw. die Strings utf8 kodieren sollte... (Sind sie das nicht durch die Einstellung im Formular accept-charset...??)

Grüße
Matt

  1. Hallo Matt,

    Vielleicht hilft es dir, wenn ich deine Aussage mal zusammenfasse ;)
    Es geht überall, nur nicht in phpMyAdmin.

    Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
  2. echo $begrüßung;

    Ein Benutzer trägt mittels Absenden eines Formulars Daten in eine MySQL Datenbank ein. Der Server ist auf utf8 kodiert, das Dokument ist utf8 kodiert (und das Formular: accept-charset="utf-8") und MySQL ist auf utf8 kodiert (Variablen wie collation connection, character set connection, character set client, character set connection server).

    Und du bist ganz sicher, dass die Einstellungen der Server-Default sind und nicht welche, die sich der phpMyAdmin explizit für sich selbst gesetzt hat? Kennst du das MySQL-Handbuch-Kapitel Character Set Support? Hast du schon mal die Kodierung der Verbindung für deinen Client explizit auf UTF-8 eingestellt (Stichwort SET NAMES utf8)?

    Nun sendet ein Benutzer das Formular ab, in phpMyAdmin steht nun z.B. anstatt "Hänch" "Hänch". Auf der Ausgabeseite auf welcher ein Script die Daten aus der MySQL-DB abruft, wird es wieder korrekt dargestellt, lediglich phpMyAdmin stellt es falsch dar. Ändere ich mit phpMyAdmin nun "Hänch" in "Hänch", stellt er mir es richtig dar, auf der Ausgabeseite ist jedoch das bekannt komische dicke Zeichen, was die Seite unbrauchbar macht.

    Das deutet darauf hin, dass du UTF-8-kodierte Daten sendest, MySQL aber annimmt, ISO-8859-1-kodierte Daten zu bekommen. Diese werden nun zum Ablegen in die UTF-8-kodierten Felder nach UTF-8 kodiert. Beim Auslesen werden sie wieder nach ISO-8859-1 zurückgewandelt, d.h. die doppelte UTF-8-Kodierung wird nun wieder eine einfache.
    Da der phpMyAdmin sich auf seiner Verbindung zu MySQL explizit SET NAMES utf8 setzt, wandelt MySQL die Daten der UTF-8-kodierten Spalten nicht um, so dass pma die doppelte Kodierung übergeben bekommt und anzeigt.

    Hat jemand eine Idee was phpMyAdmin da falsch versteht oder ob ich die SQL Query bzw. die Strings utf8 kodieren sollte... (Sind sie das nicht durch die Einstellung im Formular accept-charset...??)

    Mir ist nicht bekannt, dass der phpMyAdmin da etwas falsch macht. Bisher waren der Fehler immer woanders zu finden.

    echo "$verabschiedung $name";

    1. Danke, genau der Link hat mir geholfen... habe in meine connect.php einfach ein Query mit "SET NAMES 'utf8'" geschrieben. Nun klappt es!