dedlfix: Umlautprobleme

Beitrag lesen

Hi!

Das Kapitel Character Set Support und speziell Connection Character Sets and Collations gilt generell für MySQL und nicht nur abzüglich Perl.
Es gibt Scripts, da spielt die auf der Engine eingestellte Collation und Charset keine Rolle. Aus einem mit Perl erstellten DB_Handle lese ich bytes.

Ja, solche Anwendungsfälle wären, wenn du entweder binäre Daten speicherst oder wenn du zwar UTF-8 sendest, MySQL aber von Latin1 auf der Verbindung ausgeht. In solchen Fällen darf das DBMS aber keine Handlungen vornehmen, bei der die Zeichenkodierung berücksichtigt werden muss. Das einfache Speichern und Abfragen ohne Stringfunktionen und -vergleiche zu verwenden ist prinzipiell problemlos möglich.

Defaults in allen Ehren, aber die meisten meiner Tabellen benutzen auch bei mir definierte Attribute.

Es geht grad nicht um die Konfiguration der Tabellen sondern um die Konfiguration der Verbindung. Und dieses Thema Verbindungskodierung versuchst du schon seit einer geraumen Weile zu ignorieren.

Zum Administrieren meiner Remote-MySQL-DB benutze ich daher eigene Scripts, die in Perl geschrieben sind, da kann ich auch mal unverfälscht (ohne Browser) und stichprobenartig nachschauen, in welcher Kodierung Zeichen in der DB tatsächlich gespeichert sind.
Kannst du nicht, denn dann müsstest du einen Dateibetrachter verwenden und dir die Datenbankdateien direkt anschauen.
Die Konsole oder auch Textpad als Ausgabemedium stelle ich so ein, dass ich erkennen kann, in welcher Kodierung Zeichen ankommen. Wenn die Konsole versucht, 2 bytes einer utf-8-Kodierung als ISO-8859-1 darzustellen, sehe ich das und ich habe darüber hinaus immer noch die Möglichkeit, die bytes als utf-8-kodierte Zeichen darstellen zu lassen.

Du gehst davon nach wie vor davon aus, dass MySQL Daten von und zum Client in und aus den Tabellen unverändert durchreicht. Das ist prinzipiell nicht der Fall, weil MySQL Umkodierungen vornehmen kann und wird, wenn das erforderlich ist. Du siehst also nur das, was MySQL dir übermittelt und nicht unbedingt das, was gespeichert ist. Umkodierungen sind nur dann nicht erforderlich, wenn Feldkodierung und Verbindungsodierung auf dem selben Wert stehen. Um ungewünschte Umkodierungen garantiert zu verhindern, ist es erforderlich, die Verbindungskodierung nicht zu ignorieren. Und siehe da, auch Perl hat da was zum einstellen: DBD/mysql mysql_enable_utf8.

Lo!