de:repair-umlauts

UTF8-Reparatur mit MySQL

Inhalt

Wenn Sie LiveConfig in der Version 1.4.2 (bzw 1.5.0 < r1631) mit MySQL als Backend-Datenbank eingesetzt haben, dann sind Umlaute und Sonderzeichen vermutlich in der falschen Codierung gespeichert. Wenn Sie LiveConfig mit der integrierten SQLite-Datenbank nutzen, dann besteht das beschriebene Problem nicht.

Hintergrund

Zwischen MySQL-Client und MySQL-Server muss genau vereinbart werden, in welchem Zeichensatz die Daten übertragen und wie diese auf beiden Seiten jeweils interpretiert werden sollen. LiveConfig arbeitet intern komplett mit UTF8, daher führte der in LiveConfig enthaltene MySQL-Client direkt nach dem Verbindungsaufbau den Befehl SET NAMES UTF8; aus. Allerdings „überlebte“ es diese Einstellung nicht, wenn die Verbindung zwischen MySQL-Client und -Server zwischenzeitlich unterbrochen und (automatisch) neu aufgebaut wurde.

Ab LiveConfig 1.5.0 r1631 wurden zwei wichtige Änderungen vorgenommen: zum einen wird der o.g. Befehl nicht mehr ausgeführt, sondern die Client-Option MYSQL_SET_CHARSET_NAME vor dem Verbindungsaufbau gesetzt, welche auch bei automatischen „Reconnects“ berücksichtigt wird. Zum anderen erfolgt der Aufbau der Verbindungen beim Programmstart nun in einer anderen Reihenfolge, so dass keine Unterbrechung der Datenbankverbindung nach dem Start der einzelnen LiveConfig-Child-Prozesse mehr stattfindet.

Symptome

Falls in der LiveConfig-Weboberfläche bisher „normale“ Sonderzeichen (insbesondere Umlaute) nun merkwürdig codiert angezeigt werden, dann sind diese wahrscheinlich „doppelt“ UTF8-codiert. Beispiele:

richtig falsch
ä ä
ö ö
ü ü

Problembehebung

Die Datenbank lässt sich ziemlich einfach und zuverlässig korrigieren:

  1. beenden Sie LiveConfig:
    /etc/init.d/liveconfig stop
  2. erzeugen Sie einen Dump der LiveConfig-MySQL-Datenbank:
    mysqldump -u root -p LIVECONFIG > liveconfig.defect.sql
  3. laden Sie das sed-Script fix.sed von der LiveConfig-Website herunter und wenden Sie es auf den eben erzeugten MySQL-Dump an:
    wget http://www.liveconfig.com/downloads/fix.sed
    sed -f fix.sed < liveconfig.defect.sql > liveconfig.new.sql
  4. spielen Sie den reparierten MySQL-Dump wieder ein:
    mysql -u root -p LIVECONFIG < liveconfig.new.sql
  5. starten Sie LiveConfig schließlich neu:
    /etc/init.d/liveconfig start

Sollte wider Erwarten irgend etwas schief gehen, können Sie den „alten“ MySQL-Dump wieder zurückspielen. Das sed-Script ersetzt lediglich die falsch codierten Zeichen und kann somit auch gefahrlos mehrfach angewendet werden (was dann keinen Unterschied mehr macht).

Die hier beschriebene Reparaturmethode lässt sich übrigens ganz allgemein auf doppelt UTF8-codierte Daten in MySQL anwenden - das Problem ist nicht LiveConfig-spezifisch.

de/repair-umlauts.txt · Zuletzt geändert: 2015/05/26 18:01 von wikiadmin

Benutzer-Werkzeuge