utf-8 problem mit Datenbank
han
- php
Hallo,
meine Seiten sind alle mit utf-8 und in utf-8 und die MySql verbindung ist auch auf utf-8 gestellt.
Nun ist es so, dass wenn ich Zeichen in ein Eingabefeld eingebe wie:
↑¬Ê┤¥
dann werden diese in der direkten Vorschau ohne Datenbank dazwischen korrekt usgegeben.
Schriebe ich sie dann in die Datenbank (mit 'SET NAMES utf8') und hohle diese dann ab und gebe sie wieder aus, so erschienen ? statt den Zeichen.
Hat jemand eine Idee warum?
mfg
P.S.: nicht alle dieser "seltsamen" Zeichen weden als Fragezeichen dargestellt aber die Merhzahl.
das heißt in dem Beispiel:
↑¬Ê┤¥
werden
↑ und ┤ zu Fragezeichen also folgendes:
?¬Ê?¥
yo,
hast du den schon mal in die datenbank direkt geschaut, ob die zeichern dort richtig angekommen sind, ohne ein zusätzlich programm zu nutzen, zum beispiel über die konsol oder zur not mit phpmyadmin ?
Ilja
Also zumindets in phpMyAdmin sieht man, dass die Daten nicht richtig in der DB angekommen sind.
Aber ich hab doch die Datenbankverbindung auf utf-8 gesetzt?
echo $begrüßung;
meine Seiten sind alle mit utf-8 und in utf-8 und die MySql verbindung ist auch auf utf-8 gestellt.
Das reicht noch nicht. Zeichenkodierungen lassen sich unter anderem auch für die Felder einer Tabelle einstellen. Ich empfehle die Lektüre des MySQL-Handbuchkapitels Character Set Support.
Schriebe ich sie dann in die Datenbank (mit 'SET NAMES utf8') und hohle diese dann ab und gebe sie wieder aus, so erschienen ? statt den Zeichen.
Hat jemand eine Idee warum?
MySQL wandelt zwischen den verschiedenen Kodierungen selbständig hin und her. Prinzipbedingt ist das nicht immer verlustfrei möglich. 1.114.112 Zeichen lassen sich nun mal nicht mit nur 256 Werten darstellen. Meine Vermutung ist, dass MySQL zum Speichern in die Felder die Daten nach Latin1 (entspricht ISO 8859-1) umwandeln muss, weil die Felder so eingestellt sind. Dabei kommt es zum Verlust der nicht mit Latin1 darstellbaren Zeichen.
echo "$verabschiedung $name";
Dangge für die Antwort.
Also mein Formular erlaubt nur utf-8, meine ganzen Dokumente sind in utf-8 und die Datenbank ist auf utf8_unicode_ci eingestellt.
Leider kann ich mit dr englischen Manual nichts anfangen...
Kann/muss ich für jedes Feld den Datensatz festlegen?
grüsle
echo $begrüßung;
Leider kann ich mit dr englischen Manual nichts anfangen...
Dann nimm die deutsche Übersetzung, die es allerdings nur zur Version 5.1 gibt.
Kann/muss ich für jedes Feld den Datensatz festlegen?
Du kannst für jedes String-Feld (CHAR, VARCHAR, TEXT, etc.) die zu verwendende Zeichenkodierung (inklusive Kollation) getrennt einstellen. Und nicht nur das, wie ich bereits andeutete gibt es die Möglichkeit, jeweils unabhängig voneinander eine Zeichenkodierung festzulegen für
Das Ändern der Einstellung für eine Datenbank ändert nichts an der Einstellung für die darin liegenden Tabellen, die müssen extra geändert werden. Das gleiche gilt für eine Tabelle und deren Felder. Die Einstellung der Zeichenkodierung und Kollation für Datenbanken und Tabellen dient nur als Defaultwert. Und der wird verwendet, wenn beim Anlegen von Tabellen bzw. Feldern keine Angaben zur Kodierung gemacht werden.
echo "$verabschiedung $name";