HTML Umlaut werden in DB nicht korrekt dargestellt (UTF-8)

qhil

Captain
Registriert
Apr. 2011
Beiträge
3.119
Moin moin,

ich habe ein kleines Problem:
Über ein HTML / PHP Formular speichere ich Daten in meiner MySQL Datenbank und lese sie später auch wieder aus. Nun habe ich das Problem, dass innerhalb der Datenbank die Umlaute nicht korrekt abgelegt werden. Aus "ö" wird "ö", aus "ü" wird "ü", usw.
Wenn ich die Daten auslese und anzeigen lasse, dann werden dennoch "ö" und "ü" angezeigt - also so wie es sein soll.

Alle meine Files sind als UTF-8 (ohne BOM) kodiert, Zeichensatz / Kollation der MySQL-Verbindung in der DB steht auf "utf8_unicode_ci" und der Header sieht wie folgt aus:
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Wenn ich die Variablen vorher mit
PHP:
mb_detect_encoding($str);
überprüfe, wird mir ebenfalls UTF-8 ausgegeben. Trotzdem kommt in der Datenbank nur das oben beschriebene Zeug an.

Ich habe probiert vor dem INSERT / UPDATE
PHP:
mysql_query("SET NAMES 'utf8'");
auszuführen. Damit sind die Daten dann auch korrekt in der DB. Allerdings kommen beim Auslesen nur Fragezeichen raus. Wenn ich dann aber vor den ausgelesenen Wert
PHP:
utf_encode($str);
schreibe, ist wieder alles richtig. Nun frage ich mich allerdings, wieso ich die ausgelesenen Daten wieder in UTF-8 kodieren muss, obwohl sie als UTF-8 in der DB gespeichert wurden? Hat jemand eine Idee, wie ich das Problem lösen kann - am besten ohne, dass ich nun vor jedem ausgelesenen Wert den eben angegebene Befehl schreibe?

Vielen Dank im Voraus,
qhil
 
Zuletzt bearbeitet:
Der ideale Weg ist, direkt nach jedem Verbindungsaufbau zur DB mit "SET NAMES" zu arbeiten. Das sollte solche Probleme komplett beseitigen.
 
Daaron schrieb:
Der ideale Weg ist, direkt nach jedem Verbindungsaufbau zur DB mit "SET NAMES" zu arbeiten. Das sollte solche Probleme komplett beseitigen.

Leider eben nicht. Wie beschrieben, sind die Daten dann in der DB korrekt, aber beim Auslesen nicht. Ich müsste die Daten also beim Auslesen nochmals mit UTF-8 kodieren, was ja nicht Sinn der Sache sein dürfte.


WhiteShark schrieb:
Versuchs mal mit
Code:
SET CHARACTER SET utf8

Den Befehl habe ich auch schon getestetn. Allein und zusammen mit SET NAMES. Selbes Ergebnis. Ich hab irgendwie das Gefühl, dass an der DB was nicht stimmt. Ich finde nur irgendwie keine Einstellungsmöglichkeit. Die Kollation sollte damit ja nichts zutun haben... obwohl diese auch auf UTF-8 steht...
Ergänzung ()

Jetzt habe ich's. Eigentlich hatte ich "nur" ein Brett vor dem Kopf.

Ich habe jetzt die beiden Zeilen
PHP:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
in meiner Datenbank-Verbindungsdatei, also der Include-Datei, hinzugefügt.
Dadurch werden die Schritte sowohl beim Schreiben als auch beim Lesen ausgeführt. Da habe ich vorher nicht dran gedacht. Nun klappt alles.

Besten Dank.
 
Zurück
Oben