Euro-Zeichen in MySQL trotz utf8_decode() nicht darstellbar; Umlaute funktionieren

Thomas D

Erfahrenes Mitglied
Hallo!

Ich speichere Daten in meine MySQL-Datenbank mittels PHP. Zuvor decodiere ich noch UTF8 damit Sonderzeichen wie Ä, Ü, ß, ... richtig dargestellt werden. Dies funktioniert auch alles einwandfrei, außer beim Euro-Zeichen (€), welches in der Datenbank mit einem Fragezeichen (?) dargestellt wird.

Als Kollation in MySQL habe ich sowohl UTF8_GENERAL_CI, als auch LATIN1_SWEDISH_CI ausgewählt. Ist jetzt zwar nur 'ne Kleinigkeit, da das Euro-Zeichen erst mal nicht in der Datenbank gespeichert werden muss, aber um einer schönen Lösung Willen, hätte ich schon gerne gewusst, warum dies nicht funktioniert ...

MfG, Thomas D.
 
Hi,

Kollation != Kodierung ;)

Was passiert, wenn Du nach dem Verbingungsaufbau SET NAMES 'UTF-8' machst? Und dann die Daten natürlich nicht mehr UTF-8-dekodierst...

LG
 
Nabend,

hast du schonmal ausprobiert, ob es funktioniert, wenn du die Zeichen ganz "normal", sprich ohne utf8_decode(), in die DB einträgst und erst später beim Auslesen der Daten utf8_encode() benutzt?

MfG,
Marcel
 
hast du schonmal ausprobiert, ob es funktioniert, wenn du die Zeichen ganz "normal", sprich ohne utf8_decode(), in die DB einträgst und erst später beim Auslesen der Daten utf8_encode() benutzt?

Ich benutze schon jetzt erst später beim Auslesen ut8_encode(). Wenn ich Daten jedoch nicht UTF8-dekodiere, dann werden auch die Umlaute, das Scharfe S, ... falsch dargestellt. Mit der Konvertierung funktioniert eh alles - außer eben halt das Euro-Zeichen.
 
Die utf8_decode()-Funktion konvertiert eine UTF-8-Zeichenkette (also Unicode-Zeichen) in eine ISO-8859-1-Zeichenkette. Da der ISO-8859-1- und der Unicode-Zeichensatz jedoch nicht dieselbe Zeichenmenge haben (ISO 8859-1 enthält ganze 256 Zeichen, Unicode hingegen fast 100.000), ist es klar, dass „ein paar“ Zeichen unter den Tisch fallen. Und dazu gehört auch das Euro-Zeichen.
 
Hi,

warum schreibst Du die Daten nicht gleich UTF-8-kodiert, so wie Du sie ja offensichtlich bekommst, in die Datenbank? Dann kannst Du Dir das ganze Umkodieren sparen. Gumbo hat nunaml recht. Das Euro-Zeichen ist in ISO-8859-1 halt nicht drin.

LG
 
Hi,

warum schreibst Du die Daten nicht gleich UTF-8-kodiert, so wie Du sie ja offensichtlich bekommst, in die Datenbank? Dann kannst Du Dir das ganze Umkodieren sparen. Gumbo hat nunaml recht. Das Euro-Zeichen ist in ISO-8859-1 halt nicht drin.

LG

Hallo!

Das wollte ich ja auch usprünglich, doch wenn ich das uncodiert sende (Probeausgabe des SELECT-Statements ist absolut korrekt), dann wird in der Datenbank bei 'ßßß' beispielsweise folgendes gespeichert: 'ßßß' (soeben getestet). Und das sowohl bei Spalten, die ich auf LATIN eingestellt habe, als auch bei UTF8_GENERAL_CI. Persönlich würde ich mir auch viel lieber die ganze Herumcodiererrei sparen, doch ich frage mich, warum das in MySQL nicht korrekt funktioniert :confused: ...

MfG, Thomas D.
 
Hi,

welche MySQL-Version hast Du?
Wenn Du UTF-8-kodierte Daten über eine auf UTF-8 eingestellte Verbindung in die DB schreibst und die genauso wieder ausliest, sollte das auch funktionieren. Irgendwo hakt's da bei Dir noch...
Reden wir hier eigentlich über eigene PHP-Scripte? Dann könnte ein wenig Code nicht schaden.

LG
 
Zurück