dedlfix: UTF-8 und Windows

Beitrag lesen

Tach!

Wo und wie könnte ich denn nachsehen, welche Kodierung an welcher Stelle verwendet wird?

Es gibt Default-Werte - und ein großes Kapitel zur Thematik in der Dokumentation. Ansonsten musst du selbst angeben, welche Kodierung verwendet werden soll. Es gibt keinen zuverlässigen Mechanismus, Kodierungen zu erraten und deswegen ist das auch meist nicht vorgesehen. Jedenfalls, wenn du ein Import-Tool verwendest, muss das irgendeine Option haben, die Kodierung der Datei anzugeben. Und beim Export uss es auch eine Option geben, die die zu erzeugende Kodierung angibt.

Eben habe ich einen phpMyAdmin SQL Dump der Tabelle angefertigt, darin steht für die alte Version:

CREATE TABLE `tabelle` (
  `Datum` varchar(10) COLLATE latin1_german1_ci NOT NULL,
  ... 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;

Hier wurden die Daten damals beim Import im Format Windows-1251 eingelesen.

Die Angabe für das Feld sagt nur aus, wie MySQL das intern ablegt. Was du auf der Verbindung zum MySQL-Server für eine Kodierung verwendest, ist davon unabhängig. MySQL konvertiert das, wenn die angegebene Verbindungskodierung nicht mit der jeweiligen Feldkodierung übereinstimmt. Jedes Feld kann auch individuell konfiguriert sein. Zu beachten ist dabei, dass natürlich nicht alles in jede Kodierung umkodiert werden kann. Da kann es zu Datenverlust kommtn, wenn die Zielkodierung bestimmte Zeichen nicht kennt.

Ein neuer Import (aus einem File, das in UTF-8 vorlag), der mit der Einstellung des Formats utf8 im Interface vorgenommen wurde, zeigt stattdessen:

CREATE TABLE `tabelle_utf` (
  `Datum` varchar(10) NOT NULL,
  ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Laienhaft würde ich dann davon ausgehen, dass das Speicherformat in der neuen Version dann utf8 ist und dieses auch bei Abfragen - falls nicht eine Konvertierung angegeben/eingestellt ist - Verwendung findet.

Wenn keine Feldkodierung angegeben wurde, nimmt MySQL die Angabe für die Tabelle als Default-Wert. Ist da nichts angegeben, gibts einen für die Datenbank. Und dessen Defaultwert ist eine Servereinstellung, wenn ich mich recht erinnere. Das steht aber alles gut dokumentiert im MySQL-Handbuch.

dedlfix.