Hilfloser: Datenbank Encoding und Umlaute

Hallo!

Ich habe ein Problem mit meiner Datenbank. Dort sind Vorname und Nachname verschiedener Personen aufgelistet. Leider werden mir (auch in phpMyAdmin) sämtliche Sonderzeichen komisch dargestellt. Ein "ä" wird z.B. zu "ä". Die Kollation steht momentan auf "latin1_swedish_ci".
Was muss ich tun, damit die Umlaute richtig angezeigt werden?

  1. echo $begrüßung;

    Leider werden mir (auch in phpMyAdmin) sämtliche Sonderzeichen komisch dargestellt. Ein "ä" wird z.B. zu "ä". Die Kollation steht momentan auf "latin1_swedish_ci".

    Das sieht so aus, als ob UTF-8-kodierte Daten als ISO-8859-1 deklariert dem Datenbankserver übergeben wurden. Eine Ursache kann sein, dass vergessen wurde, für die aktuelle Verbindung die Kodierung auf einen definierten Wert einzustellen (d.h. SET NAMES vergessen).

    Die Kollation steht momentan auf "latin1_swedish_ci".

    Wessen Kollation? Es interessiert einzig der Wert für ein bestimmtes Feld. Der sagt aus, in welcher Kodierung die Daten abgelegt sind, und gibt im Prinzip nur an, welcher Zeichenvorrat in diesem Feld verwendet werden kann. Bei einer Übertragung von und zu einem Client werden die Feldinhalte gegebenenfalls umkodiert, wenn auf der Verbindung eine anderer Kodierung (vor)eingestellt ist. Prinzipbedingt ist eine Umkodierung nicht in jede Richtung möglich. Das entsprechende Zeichen muss in der Zielkodierung darstellbar sein, sonst geht es zugunsten eines Ersatzzeichens (meist ein Fragezeichen) verloren.

    Kollationsangabe für Datenbanken und Tabellen sind nur Defaultwerte, die herangezogen werden, wenn für ein anzulegendes Feld keine Kodierungsangabe erfolgte.

    Was muss ich tun, damit die Umlaute richtig angezeigt werden?

    Als erstes eine Sicherungskopie der Tabelle anlegen. Noch sind die Daten nicht verloren, und falls sie das bei den Reparaturversuchen gehen, dann hat man noch weitere Versuche. Kopieren geht im phpMyAdmin (PMA) über "Operationen".

    Eine Methode wäre ein Export mit anschließendem Import bei Angabe einer Kodierung.

    1.a) Wenn du direkten Zugriff auf den Server hast, nimm mysqldump mit dem Parameter --default-character-set=latin1 (plus weitere Parameter, um die Tabelle und Zugangsdaten anzugeben).
    1.b) Wenn du nur über PMA zugreifen kannst, mach einen Export damit.

    2. Öffne die Datei mit einem Editor im Modus UTF-8. Sind die Umlaute zu erkennen oder als ä (für ein ä) zu sehen? Eigentlich sollten sie als UTF-8 interpretiert normal angezeigt werden. Wenn das zutrifft weiter bei 3.

    • Wenn du ä siehst, speichere die Datei als ISO-8859-1, Latin1 oder Windows-1252. Weiter bei 2.
    • Wenn du 4 Zeichen pro Umlaut siehst, brauchst du zwei Umkodierungen von UTF-8 nach ISO-8859-1.
    • Wenn du Fragezeichen siehst, liegt die Datei wohl nun in ISO-8859-1 vor.

    3. Öffne die Datei zur Kontrolle in einem Browser (über das Datei-Menü). Stelle über Ansicht->(Zeichen-)Kodierung UTF-8 ein. Die Umlaute sollten zu sehen sein. Wenn nicht, stell ISO-8859-1 ein. Wenn sie nun zu sehen sind, gib nachfolgend nicht UTF-8 sondern Latin1 an.

    4. Importiere die Datei über dem PMA. Gib als Kodierung UTF-8 an. Die Umlaute sollten nun auch im PMA richtig zu sehen sein.

    echo "$verabschiedung $name";