yannick-server
Goto Top

Umlaute in DB

Hi!
Habe ein Problem bein Eintragen und Ausgeben von Daten aus meiner MySQL Datenbank.
Habe schon hier und in Google gesucht und folgende Lösung gefunden.

Beim Verbinden der Datenbank, führe ich diesen Query aus:
mysql_query("SET NAMES 'utf8'");  
Wenn ich nun die Daten eingebe funktioniert es wunderbar, in der Datenbank steht äöüß.
Gebe ich die Daten aber nun aus erhalte ich öüä�.

Kollation der Tabelle und des Feldes sind 'latin1_general_ci'.
Bin leider zu keiner Lösung gekommen.
Schonmal vielen Dank für eure Antworten
gruß Yannick

EDIT:
Wenn ich den Text normal ausgebe ohne htmlentites werden die Sonderzeichen richtig dargestellt.

Content-ID: 153617

Url: https://administrator.de/contentid/153617

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

godlie
godlie 23.10.2010 um 12:28:57 Uhr
Goto Top
Hallo eine einfache Frage sieht

latin1_general_ci gleich aus wie utf8 ?

Entweder alles utf8 oder alles latin entscheide dich.
yannick-server
yannick-server 23.10.2010 um 12:46:04 Uhr
Goto Top
Was ist denn geeigneter?
Wenn ich mich für latin entscheiden, muss ich dann auch den HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />hier ändern?

Wenn ich den Text normal ausgebe ohne htmlentites werden die Sonderzeichen richtig dargestellt.
godlie
godlie 23.10.2010 um 12:48:53 Uhr
Goto Top
Also wenn du deine Daten per utf-8 aus / eingibst und das in ein latin1 feld speicherst dann darf es dich nicht wundern.

ich würde die kollation auf utf_general_ci oder so stellen, insofern du nicht schon daten drinnen hast, sollte dies der fall sein
musst du die daten ggf. umwandeln.
yannick-server
yannick-server 23.10.2010 um 12:56:25 Uhr
Goto Top
Danke.
Ich hab jetzt mal die DB auf latin1 gestellt also mysql_query("SET NAMES 'latin1'");
Jetzt funktioniert die Ausgabe der vorhandenen Einträge, wenn ich aber neue Einträge erstelle werden diese als öüäÃ�
in der Datenbank gespeichert und auch wieder ausgegeben.
yannick-server
yannick-server 23.10.2010 um 13:29:37 Uhr
Goto Top
Jetzt klapps:

Beim Verbinden mit der Datenbank:
mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET 'latin1'");

Vor dem Eintragen
mysql_query("SET NAMES 'utf-8'");
danach wieder umstellen auf:
mysql_query("SET NAMES 'latin1'");

HTML Contynt-Type steht auf: iso-8859-1

Warum verstehe ich noch nciht, aber es klappt immerhin.
Ich wäre Froh, wenn jemand eine Erklärung dafür hätte.

Danke nochmal an godlie, du hast mir sehr geholfen

mfg
Yannick
dog
dog 24.10.2010 um 19:08:20 Uhr
Goto Top
mysql_query("SET NAMES 'utf8'");

Und wenn du dir die PHP-Doku durchliest wirst du ganz schnell sehen, dass dort von genau diesem Query explizit abgeraten wird.
Alles was der macht, ist den MySQL-Client in einen undefinierten Status zu setzen, wo alles passieren kann.

http://de3.php.net/mysql_set_charset

Und man sollte schon durch die Bank weg den selben Zeichensatz benutzen, auch wenn "UTF-8 in ISO-8859-1" ein mittlerweile so verbreiteter Fehler ist, dass ihn manche Clients korrigieren können.

Noch was: substr und einige andere Funktionen sind nicht für Multibyte-Zeichensätze wie UTF-8 geeignet!

Und jetzt bitte mal die Standardlektüre zum Thema lesen: http://www.joelonsoftware.com/articles/Unicode.html