dedlfix: Probleme mit Umlaute in MySQL 5.1.41 + PhpMyAdmin

Beitrag lesen

Hi!

Die Ausgabe der ausgelesenen Datensätze aus der DB erfolgt mit
echo htmlentities(stripslashes($ausgabe_aus_db), ENT_QUOTES, 'UTF-8');

Wenn du schon mit UTF-8 arbeitest, brauchst du keine Entities oder nummerische Zeichenreferenzen (NCR) für die Zeichen jenseits von ASCII. htmlentities() ist deshalb zu viel, htmlspecialchars() reicht völlig (da kann auch der charset-Parameter entfallen, denn alle behandelten Zeichen sind ASCII und bei ISO-8859-1 und UTF-8 eineindeutig und gleich kodiert).

Selbst nach der Umstellung der DB und allen zugehörigen Tabellen von latin1... auf utf8 und collation utf8_general_ci gabs bei der Webseitenausgabe keinerlei Probleme.

Du schickst also UTF-8-kodierte Daten an MySQL und bekommst auch solche wieder zurück. Soweit scheint das also problemlos zu klappen.

Tja und wenn ich mir die Datensätze die in der DB stehen mit PhpMyAdmin anschaue, dann sehe ich die utf8 kodierten Zeichen für die Umlaute, z.B. statt ä steht ä. Dementsprechend dürfte die utf8 kodierung der Eingaben auf der Website in die DB richtig funktionieren, aber PhpMyAdmin zeigt mit die kodierten Einträge an und dekodiert sie nicht wenn ich das richtig verstehe.

Mir ist nicht bekannt, dass der PMA Fehler bei der Zeichenkodierung macht. Man kann erst einmal davon ausgehen, dass er nach seinen Möglichkeiten alles richtig anzeigt. Das Problem ist nur, dass du beim Schreiben in das DBMS selbigem nicht mitgeteilt hast, welche Kodierung du verwendest. Lies erst einmal http://wiki.selfhtml.org/wiki/Themen:Zeichencodierung/MySQL und wenn du dann noch Fragen hast, stell sie.

Insbesondere wirst du nun wissen, dass deine Daten in der Tabelle kaputt sind und wirst sie reparieren wollen.
1. Erstelle einen Dump/Export mit dem PMA. Je nach PHP- und PMA-Konfiguration wirst du eine Kodierung beim Export angeben können oder nicht.
2.a) Wenn ja wähle Latin1. Wenn du dir die Datei in einem Browser öffnest und den auf UTF-8 stellst (meist im Menü Ansicht->(Zeichen)kodierung), solltest du die Umlaute richtig sehen können.
2.b) Konntest du beim Export nichts auswählen, musst du die Datei einmalig als UTF-8 öffnen, dabei ä für ä usw. sehen und sie nach Latin1 konvertiert speichern. Alle UTF-8-fähigen Editoren sollten das können.
3. Importiere die Datei wobei du UTF-8 angibst.
Jetzt sollte der PMA alles richtig anzeigen. Und wenn du den verlinkten Artikel gelesen und dein PHP-Code angepasst hast, sollte auch da alles stimmen.

Lo!