Sonderzeichen in MySql-Datenbank schreiben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Sonderzeichen in MySql-Datenbank schreiben

    Hallo zusammen,

    Ich hab wieder mal wahrscheinlich eine absolute triviale Frage :whistling:

    Ich habe ein Textarea-Feld aufgebaut. Nachdem drücken auf dem Submit-Button wird der Inhalt in eine MySql-Datenbank geschrieben.
    So, nun komm ich zu meinem Problem.

    Enthält der Text etwa Ä,Ü,Ö oder ß, so werden diese Sonderzeichen falsch dargestellt.
    Warum werden diese Sonderzeichen falsch in die Datenbank geschrieben?

    zur Info:
    MySql-Feld wurde als "text" deklariert und Zeichencode "utf8_generali_ci "

    Ich hoffe Ihr könnt mir helfen ;(

    gruß
    trublu
  • Oh das kann so viele Ursachen haben.
    Am Beispiel von PHP findest du hier ein paar Tipps: [wiki]Unicode und PHP <= 5[/wiki].

    Zeichensätze sind ein Abenteuer. Verfolgt man mal die Abläufe vom Editor zur Bash, von der Bash zum Terminal, vom Terminal in den Webserver, vom Webserver zum PHP Prozess, der PHP Prozess liest die Datei die einen Zeichensatz aufweist, der Code verbindet sich dann über das Connection Encoding zum MySQL Prozess, davon zur MySQL Datenbank, von der MySQL Datenbank zur Tabelle und von der Tabelle zu den Spalten so möchte man kaum wahr haben, dass jeder dieser Schritte ein eigenes Encoding verwendet kann.


    Wo werden die Zeichensätze denn falsch dargestellt? MySQL Konsole? phpmyadmin?
    Welches Encoding hat deine HTML Seite angegeben, das du zum speichern verwendest?
    Welchen Zeichensatz Header sendet der Webserver für das Dokument?
    ...
  • Danke schon mal für die Antworten,

    Mein HTML-Header sieht so aus:

    HTML-Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


    Das Problem liegt defenetiv an der MySql-Datenbank. Wenn ich den Text einfach gleich ausgebe, werden die Zeichen sauber dargestellt.
    Kaum ist der Text in der Datenbank, werden diese einfach mit irgendwelchen komischen Zeichen abgespeichert. Beim auslesen wird der Inhalt in der Datenbank einfach wieder ausgegeben.

    Ich hab keine Ahnung mehr ;(

    Edit: Hab die Datenbankspalte jetzt schon auf utf8_unicode_ci, utf8_bin und auf latin1_swedish_ci gestellt. Ohne erfolg!
    Kann ich noch irgendwas einstellen?

    gruß
    trublu

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von trublu ()

  • Hi

    meinst Du jetzt die Umlaute sind in der Datenbank mit komischen Zeichen dargestellt oder wenn Du diese dann auf der Webseite wieder ausgibst? Dass diese in Datenbank nicht 1:1 abgespeichert werden ist normal..

    wenn Du diese aber beim ausgeben auch verändert zurück kriegst, muss es entweder an der Codierung der webseite oder zeichensatz der datenbank liegen. prüf auch die spalten explizit auf den zeichensatz, manchmal macht phpmyadmin ganz schöne faxen ;)

    Gruß, Niko :)
  • Ja die Umlaute sind schon seltsam in der Datenbank abgespeichert. Beim ausgeben, werden die Umlaute genauso ausgegeben, wie sie in der Datenbank drinstehen.
    Ich hab auch mal den versuch gestartet, den Text auszugeben, bevor ich ihn in die Datenbank schreibe.

    Der Text wurde richtig ausgegeben.

    Danke schon mal für die Antworten hier

    gruß
    trublu
  • Ist es nicht vielmehr so, dass das unter "Collation" der entsprechenden Datenbank / Tabelle nicht damit zusammenhängt wie die Datenbank ihre Daten vorhält, sondern schlicht wie diese bei einer eventuellen Sortierung ausgegeben werden? Also ob ü nach u kommt, oder doch eher nach den Ziffern.

    Meines Wissens ist es möglich Unicode Zeichenketten zu speichern, diese aber nach " latin1_swedish_ci" zu sortieren. Für die Ein-/ und Ausgabe der Zeichenketten sollte das unerheblich sein. Entsprechend den Standard-Einstellung der MySQL-Datenbank werden alle Zeichenketten als UTF-8 gespeichert. Leider hab ich es jetzt nicht im Kopf wo du das einfach nachprüfen kannst; abgesehen von der my.cnf: Dort ist es das "default-character-set" Attribut.


    Dein Problem scheint schlicht zu sein, dass der Client, welcher auch immer, die UTF-8 Zeichen nicht als solche anzeigt, sondern versucht diese auf eine andere Zeichencodierung zu übertragen. Für jedes "Sonderzeichen" erhälst du dann meist zwei scheinbar willkürliche Zeichen!

    Du solltest also dazu übergehen explizit den Zeichencode beim Ein-/ und Auslesen der Datenbank vorzugeben: Am Besten als UTF-8 kodiert. Nur so kannst du sicher gehen, dass auch alles so angezeigt wird, wie du es willst.