Johannes21: Umlaute in MySQL-Textfield speichern

Hi!

Wenn ich folgendes mysql-code ausführen lasse wird in der mysql-tabelle nur "Die Umlaute " gespeichert, warum? :-/
"INSERT INTO test (blabla) VALUES ('Die Umlaute äöü und ß funktionieren nicht');"

thx
Johannes

  1. Grüße,
    welche "collation" (zeichenkodierung) ist eingestellt?
    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. "utf8_general_ci"
      Was müsste ich denn da einstellen?

      lg
      Johannes

      1. Grüße,

        Was müsste ich denn da einstellen?

        bloß als test - codiere ein teststring ("bl123ablaÖÄÜ&öäü" oder sowas) mit htmlenties() und zeichenkodierung utf-8 und speichere dann.
        was kriegst du in der db?

        MFG
        bleicher

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
        Boccaccio
        1. ehm - srry - hier der link noch mal htmlentites()

        2. echo $begrüßung;

          bloß als test - codiere ein teststring ("bl123ablaÖÄÜ&öäü" oder sowas) mit htmlenties() und zeichenkodierung utf-8 und speichere dann.
          was kriegst du in der db?

          Kaputte Daten, die man nicht mehr durchsuchen kann. In einer Datenbank hat keinerlei Formatierung für ein bestimmtes Ausgabemedium etwas zu suchen.
          Außerdem: Wenn du die Funktion htmlentities() auf einen String angewendet hast, ist eine UTF-8-Kodierung witzlos, weil dann nur noch ASCII-Zeichen übrigbleiben, die in UTF-8-Kodierung genau wie in ISO-8859-1 kodiert sind.

          echo "$verabschiedung $name";

  2. echo $begrüßung;

    Wenn ich folgendes mysql-code ausführen lasse wird in der mysql-tabelle nur "Die Umlaute " gespeichert, warum? :-/
    "INSERT INTO test (blabla) VALUES ('Die Umlaute äöü und ß funktionieren nicht');"

    Woher weißt du, was in der MySQL-Tabelle gespeichert wird? So ein MySQL-Server sieht für Anwender wie eine Blackbox aus. Wenn du deren Inhalt prüfen willst, musst du also eine Abfrage senden und deren Ergebnisse irgendwie sichtbar machen. Wie geschieht das in deinem Fall konkret?

    Bei einem MySQL-Server sind zwei der 10 verschiedenartigen Kodierungsangaben besonders wichtig. Die Angabe der Kodierung der Felder legt fest, welche Zeichen überhaupt abgelegt werden können. Die Angabe einer Kodierung für die aktuelle Client-Verbindung[*] legt fest, wie vom MySQL-Server die übergebenen Daten interpretiert werden, und wie er die zurückkommenden Daten liefern soll. Gegebenenfalls werden für nicht explizit angegebene Kodierungen Defaultwerte verwendet. Auch versucht MySQL zwischen unterschiedlichen Kodierungen umzukodieren, was aber prinzipbedingt nicht in jedem Fall verlustlos möglich ist.

    [*] Zusammengefasst in SET NAMES sind das eigentlich schon 3 der 10 Arten.

    echo "$verabschiedung $name";

    1. Hi!

      ich glaub zwar verstanden zu haben was du geschrieben ahst, weiß aber immer noch nicht was ich tun soll!
      Wenn ich auf meiner PHP-Seite einen Text mit Umlauten an MySQL schicke, befindet sich (laut phpMyAdmin) ab dem ersten Umlaut nix mehr in der Tabelle. Wenn ich jedoch mit PHPMyAdmin was eintrage wird es gespeichert.

      lg
      Johannes

      1. echo $begrüßung;

        Wenn ich auf meiner PHP-Seite einen Text mit Umlauten an MySQL schicke, befindet sich (laut phpMyAdmin) ab dem ersten Umlaut nix mehr in der Tabelle. Wenn ich jedoch mit PHPMyAdmin was eintrage wird es gespeichert.

        Du hast vermutlich vergessen, auf der Client-Verbindung die zu verwendende Kodierung einzustellen. Die Default-Angabe weicht nun offensichtlich von der verwendeten Kodierung ab. mysql_set_charset(), mysqli_set_charset() oder ein "SET NAMES"-Statement kann zielführend sein. "Kann", weil mir das Fehlerbild so nicht bekannt ist. Normalerweise sieht man nur falsch (de)kodierte Zeichen. Vielleicht ist da auch noch was anderes mit im Spiel.

        echo "$verabschiedung $name";

        1. Hab jetzt nach dem Verbindungsaufbau folgenden Code ausgeführt:

          mysql_set_charset('utf8_general_ci', $DB_LinkID);
          und danach das ganz normale mysql_query.

          Es funktionier leider trotzdem ned :-/

          lg
          Johannes

  3. Hi!

    Ich bin jetzt auf ein paar Sachen draufgekommen und konnte sie lösen.
    Ich hab jetzt nur noch ein Problem:

    Ich hab es jetzt in der HTML-Kodierung, wenn ich diesen HTML-Kodierten-Text einem email mit folgendem Header verschicke, bekomme ich aber den Code angezeigt:
    Content-type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit

    Deshalb hab ich vorm versenden die Sonderzeichen wieder zurückkodiert:
    $str = str_replace('ß', 'ß', $str);

    das wird aber nur mehr als "?" angezeigt :-/

    lg
    Johannes

    1. Hi,

      Ich hab es jetzt in der HTML-Kodierung, wenn ich diesen HTML-Kodierten-Text einem email mit folgendem Header verschicke, bekomme ich aber den Code angezeigt:
      Content-type: text/plain; charset=UTF-8
      Content-Transfer-Encoding: 8bit

      Natuerlich, du hast ja angegeben, dass das ganze als reiner Text betrachtet werden soll: "Content-type: text/plain"

      Deshalb hab ich vorm versenden die Sonderzeichen wieder zurückkodiert:
      $str = str_replace('ß', 'ß', $str);

      das wird aber nur mehr als "?" angezeigt :-/

      Damit bist du also wieder an der Stelle angekommen, wo die Kodierung der Zeichen nicht zu der Angabe passt, die du diesbezueglich machst - du drehst dich also fein im Kreis.

      MfG ChrisB

      1. Das hab ich auch schon gemerkt^^
        Aber ich würd ja gerne wissen wie welche Kodierung ich angeben muss, damit die Sonderzeichen richtig dargestellt werden bzw. WIE ich die Sonderzeichen kodieren muss...

        lg
        Johannes

        1. echo $begrüßung;

          Aber ich würd ja gerne wissen wie welche Kodierung ich angeben muss, damit die Sonderzeichen richtig dargestellt werden bzw. WIE ich die Sonderzeichen kodieren muss...

          Entscheide dich für eine Kodierung: ISO-8859-1 oder UTF-8. Verwende dann Werkzeuge (Editoren), die in der Lage sind, deine Dateien in der gewählten Kodierung speichern können. Das betrifft vor allem die Dateien, in denen Nicht-ASCII-Zeichen vorkommen. Achte stets darauf, dass beim Speichern diese Kodierung verwendet wurde. Gib die gewählte Kodierung allen beteiligten Systemen an (HTTP/HTML, Mail, Datenbank, usw.). Beobachte genau: Wem gibst du welche Daten in welcher Kodierung, und weiß der Empfänger über die verwendete Kodierung Bescheid? Wenn du diese Frage nicht klar beantworten kannst, suche nach Informationen, wie man das macht (oder frag hier nach).

          Ein einfacher Test, welche Kodierung vorliegt, ist das Öffnen im Browser. Im Menü Ansicht->(Zeichen-)Kodierung kannst du verschiedene Kodierungen wählen. Wenn alle Zeichen richtig angezeigt werden, kann man davon ausgehen, dass die Daten in der gewählten Kodierung vorliegen. Mit technischen Mitteln ist es aber nicht möglich, eine verwendete Kodierung zweifelsfrei zu erkennen. Deswegen ist es wichtig, dass der Empfänger darüber korrekt unterrichtet wird.

          echo "$verabschiedung $name";