dedlfix: Einstellung des Zeichensatzes bei mysql-Abfragen

Beitrag lesen

Hi!

Wenn ich direkt die Dateien der Tabellen ansehe, finde ich die Sonderzeichen korrekt dargestellt, wenn ich den Editor auf Latin1 einstelle. Das sollte ja eigentlich passen, denn character_set_server ist ja auch auf latin1 gesetzt. Doch character_set_system macht mir Sorgen.

Wenn du die Bedeutung dieser Konfigurationseinstellungen ausführlicher kennenlernen möchtest, nimm dir das Kapitel Character Set Support vor. Ansonsten ist für den Anwender nur die Kodierung der Felder auf der einen Seite und die der Verbindung auf der anderen Seite wichtig. Alles andere sind mehr oder weniger Default-Werte, wenn man keine konkreten Angaben macht. Das sollte man aber tun, wenn man keinen Datenverlust haben möchte.

Wenn ich das Wiki richtig verstehe besagt diese Variable, dass einzig und allein die Bezeichner in utf8 kodiert sein müssen. Das würde dann heissen, dass ich nun alle Bezeichner nach utf8 umkodieren muss, während ich die Tabellen-Dateien in Latin1 belasse. Oder?

Nein, denn der gibt nur an, wie die Bezeichner gespeichert werden, und betrifft nicht ihre Notation in SQL-Statements. SQL-Statements müssen gemäß dem ausgehandelten (oder auf default gelassenen) Wert für character_set_client kodiert sein. - Das interessiert (bei Latin1- oder UTF-8-Verwendern) aber nur für Bezeichner, die aus Nicht-ASCII-Zeichen bestehen.

Eine andere Möglichkeit wäre, die Dateien vollständig nach utf8 zu konvertieren und character_set_server auf utf8 umzustellen. Oder?

Als Anwender sollte man nur die in der Kurzanleitung im Wiki erwähnten Dinge beachten: Feldkodierung und Verbindungskodierung explizit einstellen. Anstelle der Feldkodierung kann man auch die übergeordneten Default-Werte der Tabellen- und Datenbank-Kodierung konfigurieren, aber, wie gesagt, letzten Endes gibt die Feldkodierung an, welche Kodierung zum Speichern verwendet wird.

Doch wie kann ich character_set_server verändern. Eine SET-Anweisung in phpMyAdmin brachte kein Resultat: Er springt wieder ohne etwas zu melden zum Startbildschirm.

Wenn du character_set_server als Anwender änderst, dann geht dieser Wert am Sessionende wieder verloren. Im PMA nützt eine solche Einstellung lediglich dann etwas, wenn du im selben SQL-Fenster ein weiteres SQL-Statement ausführst, denn dann kann sie auf dieses wirken. Aber auch dann hast du mit dieser Direktive nicht alles erwischt, denn sie wird von den Individualeinstellungen übertrumpft.

Als Administrator kannst du zwar diese Einstellung serverglobal ändern, aber auch dann gelten die Überschreibregeln. Fazit: Lass diese Direktive so, wie sie der Administrator eingestellt hat und konzentrier dein Augenmerk auf die Feld- und Verbindungskodierungen.

Lo!