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

Beitrag lesen

echo $begrüßung;

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

Du suchst, so scheint es mir, immer noch auf dem Server, nicht beim Client. Wenn die Anwendung auch mal mit MySQL-Servern laufen soll, auf die du keinen Einfluss hast, musst du mit dem Client nach dem Verbindungsaufbau die zu verwendende Kodierung aushandeln können.

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:

Die lassen sich nicht konfigurieren, nur pro Verbindung setzen.

default-character-set=utf8
default-collation=utf8_general_ci

Die beiden sind deprecated. Die beiden folgenden sind die zu verwendenden.

collation_server=utf8_unicode_ci
character_set_server=utf8

Und sie wirken auch als Default-Werte für Client-Verbindungen.

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.

In welche Richtung? Von und zum Browser, nehm ich an. Die Kommunikation mit der Datenbank sollte davon nicht betroffen sein. (Vorausgesetzt, du reichst nicht "falsch" kodierte Daten weiter.)

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?

Eher, dass sie als ISO-8859-1 kodiert sind. Schau dir den Quelltext im Browser an, stell dabei die Kodierung der Quelltextansicht auf ISO-8859-1 (geht zumindest im Firefox), dann siehst du ja pro Byte ein Zeichen und kannst auch die typischen UTF-8-Sequenzen sehen - oder auch nicht, wenn du kein UTF-8 hast.

echo "$verabschiedung $name";