Michael: UTF-8 Daten in MYSQL Datenbank

Hallo, ich habe mal wieder ein Problem:

Ich habe Datensätze in Russisch. Diese werden in der MYSQL-Datenbank richtig dargestellt und auch die Ausgabe funktioniert einwandfrei. Alles wird richtig dargestellt. Der Administrator soll aber bestimmte Inhalte verändern können, also lese ich die Daten aus, gebe sie in ein Formular, dort kann er sie verändern und wieder zurück an die Datenbank schicken. Leider klappt der Weg zurück NICHT !

Mein Formular:
<form id="form1" name="form1" accept-charset="utf-8" method="post" action="change.php">

Die Daten sind UTF-8, die Seite (sagt FF) ist UTF-8 und die MYSQL-Datenbank ist UTF-8 ...

Hier der UPDATE - Befehl:
$change = "UPDATE dictionary Set ru = '".$_POST['2ru']."' WHERE id = '2'";
$update = MYSQL_QUERY("SET NAMES 'utf8'");
$update = MYSQL_QUERY("SET CHARACTER SET 'utf8'");
$update = mysql_query($change);

Doch am Ende stehen in der Datenbank wieder Fragezeichen.
fyi: Tamper Data sagt mir, dass der Connect per ISO Codierung erfolgt ist.

Was muss ich ändern, dass er mir die Daten richtig wegspeichert?

Danke + Gruß
Michael

  1. Hi,

    Also ich hatte neulich den Fehler gemacht den <textarea>-Inhalt
    durch htmlentities() zu geben. Ohne den richtigen Zeichensatz-
    Parameter macht das aber Murks aus UTF8-Zeichen.

    Eine andere Fehlerquelle könnte sein, daß die HTML-Seite selber
    Latin1 verwendet, oder der Webserver noch ";charset=ISO-8859-1"
    mitsendet. Das könnte einige Browser durcheinander bringen,
    auch wenn's dein <form>-Tag richtig angegeben hat.

    Deine SQL-Befehle sehen zeichensatztechnisch aber gut aus. (Zu
    dem ungefilterten $_POST[var] will ich mal jetzt nichts sagen.)
    "Tamper Data" sagt mir in dem Zusammenhang nix. Und was du mit
    "der Connect" meinst ist mir auch nicht ganz klar.

    G!
    mario

    1. Hi,

      Also ich hatte neulich den Fehler gemacht den <textarea>-Inhalt
      durch htmlentities() zu geben. Ohne den richtigen Zeichensatz-
      Parameter macht das aber Murks aus UTF8-Zeichen.

      Eine andere Fehlerquelle könnte sein, daß die HTML-Seite selber
      Latin1 verwendet, oder der Webserver noch ";charset=ISO-8859-1"
      mitsendet. Das könnte einige Browser durcheinander bringen,
      auch wenn's dein <form>-Tag richtig angegeben hat.

      Deine SQL-Befehle sehen zeichensatztechnisch aber gut aus. (Zu
      dem ungefilterten $_POST[var] will ich mal jetzt nichts sagen.)
      "Tamper Data" sagt mir in dem Zusammenhang nix. Und was du mit
      "der Connect" meinst ist mir auch nicht ganz klar.

      G!
      mario

      Tamper Data ist ein Programm das Datenbank Connects unter die Lupe nimmt ! Und dort sagt mir das AddOn das die Verbindung zur Datenbank per iso-Zeichensatz verläuft, was ja auch die Fragezeichen erklären würde. Leider weiß ich nicht was das genau Problem an meinem Connect ist !!!

      1. Tamper Data ist ein Programm das Datenbank Connects unter die Lupe nimmt ! Und dort sagt mir das AddOn das die Verbindung zur Datenbank per iso-Zeichensatz verläuft, was ja auch die Fragezeichen erklären würde. Leider weiß ich nicht was das genau Problem an

        meinem Connect ist !!!

        Ein Firefox-Addon kann dir NICHT sagen, mit welchem Zeichensatz
        dein PHP-Script den DB-Server anspricht.

        Das "Connect" dort bezieht sich auf die Firefox-Verbindung zum
        HTTP-Server.

        Sprich das Formular wird mit Latin-1 übertragen. Ein Browser+
        Seiten-Problem. Hat nichts mit MySQL zu tun.

  2. echo $begrüßung;

    Diese werden in der MYSQL-Datenbank richtig dargestellt und auch die Ausgabe funktioniert einwandfrei.

    Worauf beruht deine Annahme, in der Black-Box namens "MySQL" sei etwas richtig dargestellt? Um an den Inhalt heranzukommen musst du ihn ausgeben, und dabei nimmt MySQL gegebenenfalls Umkodierungen vor, wenn die Kodierung der Felder nicht mit der Kodierung der Verbindung übereinstimmt.

    Welche Kodierung ist überhaupt für die beteiligten Felder eingestellt?

    Alles wird richtig dargestellt. Der Administrator soll aber bestimmte Inhalte verändern können, also lese ich die Daten aus, gebe sie in ein Formular, dort kann er sie verändern und wieder zurück an die Datenbank schicken. Leider klappt der Weg zurück NICHT !

    Untersuche, welche Bytes du verarbeitest. Was bekommst du vom Browser? Was bekommst du vom DBMS? Sichbar machen kannst du die Bytes mit bin2hex() oder auch url_encode().

    Die Daten sind UTF-8, die Seite (sagt FF) ist UTF-8 und die MYSQL-Datenbank ist UTF-8 ...

    $update = MYSQL_QUERY("SET NAMES 'utf8'");
    $update = MYSQL_QUERY("SET CHARACTER SET 'utf8'");

    Wenn dich das Ergebnis einer Funktion nicht interessiert, brauchst du es auch nicht einer Variablen zuzuweisen. Siehe außerdem: </archiv/2007/7/t157019/#m1022293>.

    Wenn du schon das Funktionsergebnis in $update ablegst, kannst du es auch gleich mal zur Kontrolle mit var_dump() ausgeben lassen. Vielleicht signalisiert dir MySQL ja auch einen Fehler.

    Doch am Ende stehen in der Datenbank wieder Fragezeichen.

    Siehe oben. Woraus genau schlussfolgerst du, dass sie drin stehen und nicht nur bei der Ausgabe entstanden sind?

    echo "$verabschiedung $name";