dedlfix: Export mit PhpMyAdmin Probleme mit Umlauten??

Beitrag lesen

echo $begrüßung;

Ich versuche schon den ganzen Morgen verschiedene sachen.

Du musst penibel für jeden Schritt beachten, in welcher Kodierung die ankommenden Daten vorliegen und in welcher sie vorliegen müssen, wenn du sie weitergibst.

Alle Tabellen und Spalten sind "latin1_swedish_c".

Die Tabelleneinstellung ist bei bestehenden Feldern komplett uninteressant. Es zählt immer nur die für das Feld eingestellte Kodierung.

Bei jeder Kommunikation mit dem MySQL-Server kommt noch hinzu, dass der Client sich für seine Verbindung eine definierte Kodierung aushandelt. Für den Client interessiert letzlich nur diese ausgehandelte Verbindungskodierung. Wenn Verbindungskodierung und Feldkodierung unterschiedlich sind, übersetzt der MySQL-Server selbständig zwischen ihnen. Das geht nur prinzipbedingt nicht verlustfrei zwischen allen Kodierungen.

Ich exportiere Tabelle1 mit PhpMyAdmin wo auch Umlaute drin sind.

UTF-8, weil es phpMyAdmin per Voreinstellung nicht anders macht. Eben fand ich noch die Einstellung $cfg['AllowAnywhereRecoding']. Wenn diese auf true steht (default: false), und die iconv- oder recode-Erweiterung in PHP zur Verfügung steht, kann man beim Export auch die gewünschte Kodierung angeben.

Dann öffne ich diese mit dem Editor textpad. Hier ist alles wie in der Datenbank, also Ü belibt Ü und Ä bleibt Ä.

Mit welcher Kodierung wir die Datei interpretiert?

Jetzt gleiches Spiel mit Tabelle 2 und jetzt wird plötzlich aus "Büro" => "Büro".

Mit welcher Kodierung wir die Datei interpretiert?

Wieso ist das so unterschiedlich?

Weil vielleicht eine automatische Kodierungserkennung nicht richtig arbeitet. Prinzipbedingt kann solch eine Erkennung nicht in jedem Fall korrekt arbeiten.

Ein System, das eine Ausgabe erzeugt, muss die ankommenden Informationen auswerten, um dann das jeweils entsprechende Zeichen herauszusuchen, um es anzuzeigen. Je nachdem, wie es dabei die ankommenden Bytes interpretiert sieht die Anzeige aus. Bei fehlerhafter _Darstellung_ ist zunächst zu ergründen, wie der Darsteller die Daten interpretiert hat.

Ich muss mich allerding in einem Punkt korriegieren.
Wenn ich nun diese SQL Datei wo "Büro" drinsteht wieder mit PhPMyAdmin importiere und auch damit anschaue, ist alles wieder ok also "Büro".

Welche Kodierung wurde beim Importieren angegeben? Ich nehme UTF-8 an.

Mein Problem ist: Ich versuche mit einem eigenen Script wieder zu importieren.

Hat sich das Script eine passende Verbindungskodierung ausgehandelt?

ich habe nun versucht den Header auch mit UTF8 einzustellen.
header('Content-Type: text/html; charset=utf8');

Der sagt dem Browser, in welcher Kodierung du ihm die Daten sendest. Für die Kommunikation mit MySQL hat dieser Wert keine Bedeutung.

Trotzdem wird auf diese Weise immer "Büro" reingeschrieben.

Auf welche Kodierung hat sich der Browser eingestellt? Was ist im Menü Ansicht unter (Zeichen-)Kodierung angehakt?
Zusatzfrage: Was wird dargestellt, wenn ISO-8859-1 gewählt wird? Das ist eine 1-Byte-gleich-1-Zeichen-Kodierung. Hier sieht man noch am ehesten, welche Bytefolge gesendet wurde.

Und nochmal zur Wiederholung mein einleitender Satz, weil er bei der Kommunikation zwischen verschiedenen Prozessen wichtig ist:

Du musst penibel für jeden Schritt beachten, in welcher Kodierung die ankommenden Daten vorliegen und in welcher sie vorliegen müssen, wenn du sie weitergibst.

echo "$verabschiedung $name";