Fehlersuche in MySQL, Perl und DBI

MySQL benutzt intern eine eigene proprietäre Zeichenkodierung

Wir haben eine Tabelle mit der Configuration CHARSET=utf8 COLLATE=utf8_bin und nach einem Insert eines 'ä' sehen wir 'hex(c)' => 'C383C2A4' was natürlich etwas seltsam anmutet. Tatsächlich jedoch ist es so, daß bei dem Insert vergessen wurde ein set names utf8 anzuweisen und von daher wird die mysqlinterne Kodierung sichtbar. Textabfragen funktionieren jedoch weiterhin und liefern auch die richtigen Bytesequenzen.

Das Statement set names utf8 collate utf8_general_ci setzt die Variablen character_set_client, character_set_connection, und character_set_results

mysql> show variables like 'character_set%'; +--------------------------+---------------+ | Variable_name | Value | +--------------------------+---------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_results | utf8 | +--------------------------+---------------+

Und wenn diese Variablen der Kollation entsprechend gesetzt wurden, liegen nach dem Insert auch die richtigen Bytesequenzen für die eingefügten Zeichen in der Tabelle. Bei einem Mismach benutzt MySQL eine eigene proprietäre Zeichenkodierung.

Fehlersuche betreff Zeichenkodierung

Hilfreich ist die MySQL-interne Funtion hex() welche die Bytewertigkeiten sichtbar macht. Darüber hinaus gibt es noch das Schlüsselwort binary was man sowohl bei einem Select als auch bei einem Insert anwenden kann:

insert into chr(c)values(binary 'ä') select c, binary c, hex(c) from chr

Des Weiteren ist ein show character set ganz nützlich um zu schauen welche Zeichenkodierungen unterstützt werden.

'Charset' => 'utf8mb4', 'Default collation' => 'utf8mb4_general_ci', 'Description' => 'UTF-8 Unicode', 'Maxlen' => '4'

Default-Angaben

Die Angabe default charset zur Tabelle definiert den Fehlwert, also den charset welchen ein Feld bekommt für das kein eigener charset definiert ist. Die Default collation hingegen bezieht sich auf einen für das Feld definierten charset ohne Angabe der collation.


Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.