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.
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'
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. sos@rolfrost.de.