*Markus: (LINUX / BASH / MYSQL) Verständnisproblem bei Zeichenkodierung

Beitrag lesen

Hallo,

Wenn nun doch noch ein Client explizit für sich was aushandeln will, ignoriert der Server das. Wenn du diese Einstellung nötig hast, damit UTF-8 richtig behandelt wird, dann versucht irgendwo noch ein Client was anderes auszuhandeln. Suche in dem Fall lieber die Stelle in der API des Client, an der die zu verwendende Kodierung eingestellt werden kann.

Ok, wenn ich in der my.cnf zusätzlich diese Einstellung vornehme:

[client]
default-character-set=utf8

kann ich die handshake-Zeile weglassen, falls sie vorher etwas bewirkt hat.

Aussschlaggebend für das Ergebnis ist character_set_results. Für das Senden zum Server sind character_set_connection und character_set_client zuständig.

Ich habe versucht, diese Werte zu setzen, aber nur folgende Werte funktionieren:

default-character-set=utf8
default-collation=utf8_general_ci
collation_server=utf8_unicode_ci
character_set_server=utf8
character_set_client=utf8

Füge ich die zwei o.g. nicht eingesetzten Werte ein, kann der MySQL-Daemon nicht mehr starten ([FAIL] und ohne Meldung im Logfile).

Selbst bei all diesen gesetzten Werten muss ich in dem Java-Servlet

  
   request.setCharacterEncoding("UTF-8");  
   response.setCharacterEncoding("UTF-8");  

stehen lassen. Sonst würden die Umlaute zerstört werden. Allerdings kann ich einen Effekt beobachten. Sind die Umlaute zerstört, benötigen sie ungewöhnlich viele Leerzeichen nach dne eigentlichen Zeichen. Ist das ein Indiz dafür, dass es ev. doppelt kodiert wurde?

Jetzt liegt es wohl nur noch am JDBC-Treiber, denn ich glaube, die DB funktioniert jetzt mit UTF8 problemlos. Ich kann auch durch den MySQl-Client per Insert Umlaute über die Bash einfügen.

Markus

--