dedlfix: Mysql Client

Beitrag lesen

Hi!

Die MySQL Workbench (grad eben frisch installiert und im Query-Log des Servers nachgesehen) handelt nach dem Verbindungsaufbau UTF-8 als Verbindungskodierung aus. Wenn du falsche Daten siehst, sind diese aller Wahrscheinlichkeit nach schon falsch abgelegt.
das war auch meine erste vermutung, dass die Daten schon dort falsch gespeichert sind. ich muss der sache aber noch mal nachgehen.

Zeig mal, was du bei einem Umlaut in der Workbench siehst. Und frag von einem Wert mit Sonderzeichen drin LENGTH() und CHARACTER_LENGTH() ab. Das eine muss die Anzahl der Bytes liefern (also bei einem String mit n Zeichen inklusive einem Umlaut: n+1), das andere die Anzahl der Zeichen (also n). Wenn du n+3 und n+1 erhältst, hat man zwar UTF-8-Daten gesendet aber MySQL ging von Latin1 aus. MySQL wertet dann jedes UTF-8-Byte als ein Latin1-Zeichen, kodiert das zum Speichern gemäß Feldkodierung nach UTF-8 um. Beim Abfragen macht es daraus wieder Latin1 und übergibt es dem Client, woraufhin dieser davon ausgeht, die Bytes seien UTF-8. Das geht zunächst aus Client-Sicht problemlos, solange man immer mindestens n+ü Zeichen Platz im Feld hat und nicht Sortieren will (n=insgesamte Anzahl der Zeichen im Wert; ü=Anzahl der UTF-8-Zeichen aus dem Bereich U0080..U07FF).

Wurde denn beim Verwenden von anderen Programmen darauf geachtet, eine Verbindungskodierung explizit auszuhandeln?
ich habe für meine oracle datenbank, genauer gesagt für den "datenbank link" eine odbc verbindung eingerichtet und dort explizit UTF-8 angegeben. die gleichen probleme mit den sonderzeichen wie mit der workbench. allerdings kämpfe ich dort noch mit ganz anderen problemen rum, insofern wollte ich erst einmal nur von der workbench ausgehen.

Oracle interessiert hier nicht, sondern die anderen Programme, die Daten in die MySQL-Tabellen schreiben, die du workbenchen willst. Übrigens müsste auch der phpMyAdmin das gleiche Problem bekommen, denn auch der handelt ordnungsgemäß eine Verbindungskodierung aus und ist auf korrekt gespeicherte Daten angewiesen.

Lo!