You are not logged in.

  • Login

1

Saturday, October 17th 2009, 7:21pm

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

2

Saturday, October 17th 2009, 8:35pm

Oh das kann so viele Ursachen haben.
Am Beispiel von PHP findest du hier ein paar Tipps: Unicode und PHP <= 5.

Quoted

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?
...

3

Saturday, October 17th 2009, 8:46pm

UTF-8 sollte ok sein.. wie ist denn die Webseite codiert? Wurde ja schon gefragt.. diese sollte natürlich auch UTF-8 codiert sein :)
lg

4

Sunday, October 18th 2009, 8:42pm

Danke schon mal für die Antworten,

Mein HTML-Header sieht so aus:

Source code

1
2
3
4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<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

This post has been edited 1 times, last edit by "trublu" (Oct 18th 2009, 9:08pm)


5

Sunday, October 18th 2009, 10:02pm

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 :)

6

Sunday, October 18th 2009, 10:09pm

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

7

Sunday, October 18th 2009, 11:07pm

du sagst immer "in der Datenbank".
Dabei ist entscheidend mit welchem Client du darauf zugreifst.

Wo werden die Zeichensätze denn falsch dargestellt? MySQL Konsole? phpmyadmin?

8

Monday, October 19th 2009, 10:59am

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.

9

Monday, October 19th 2009, 2:08pm

Hurra, habs jetzt endlich das Problem gelöst.

Das Problem war die "Datenbank Connection Encoding".

Source code

1
$eintragen = mysql_query("SET NAMES 'utf8'");


@ d0nut: Ich hab mir deine Wiki ewig angeschaut, konnte aber mit exec nichts anfangen.

DANKE noch mal für euere Unterstützung :thumbsup:

gruß
trublu

Social bookmarks