dedlfix: mysql, Umlautproblem

Beitrag lesen

Tach!

ich hole mir aus einer utf-8-Tabelle einer DB Daten.

Dabei kann man viel falsch machen, weil es mehrere Stellen gibt, an denen man eine Kodierung einstellen/verhandeln kann.

Die wichtigsten Stellen sind Kodierung der Felder, Kodierung der Datenbank und die Kodierung der Verbindung. Die Kodierung der Datenbank spielt dann eine Rolle, wenn mehrere Kodierungen verwendet werden und MySQL umkodieren soll. MySQL kodiert vor allem dann um, wenn die Verbindungskodierung auf einer anderen Kodierung steht als das Feld, in das geschrieben oder von dem gelesen werden soll. Jeses Feld kann dabei seine eigene Kodierung haben.

Anschließend welchsle ich in eine andere DB, dort habe ich eine latin1 codierte Tabelle und habe in einer varchar-Spalte ein Umlautproblem, das ich wie folgt lösen wollte, aber nicht konnte:

Mit PHP muss man da nichts weiter machen, als die Kodierung der Verbindung nach dem Connect zu setzen. MySQL kodiert das selbständig für die entsprechenden Felder um.

Voraussetzung, dass es keine Kodierungsprobleme gibt, ist natürlich, dass in Vergangenheit, Gegenwart und Zukunft die Kodierungsangaben ordnungsgemäß gesetzt/verhandelt wurden und die zum DBMS gesendeten Daten auch dementsprechend kodiert waren.

Das zu testen eignet sich als Hausmittel der phpMyAdmin. Wenn der die Nicht-ASCII-Zeichen korrekt anzeigt, ist üblicherweise alles in Ordnung. Wenn nicht, sollte man erstmal reparieren. Wie das genau zu bewerkstelligen ist, kommt auf das konkrete Fehlerbild an.

$iso88591 = utf8_decode($utf8);
$iso88591 = iconv('UTF-8', 'ISO-8859-1', $utf8);
$iso88591 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');

Keine dieser 3 Optionen hat gegriffen.

Was kann ich noch tun?

Das System Kodierung zu verstehen ist eine Grundvoraussetzung. Da Unerfahrene dabei häufig Fehler machen, ist es auch zu wissen von Vorteil, wie sich Fehler auswirken. Und wenn man anderen die Probleme schildern möchte, sollte man dabei sehr exakt sein. "Hat nicht gegriffen" ist nichtssagend, daraus kann man nicht entnehmen was schiefläuft.

dedlfix.