Zeichensalat vermeiden - Teil 2 von 3

von Andreas Gallien (Kommentare: 0)

MySQL auf UTF-8 umstellen

Wenn die bisherige MySQL-Datenbank, deren Tabellen und Felder ISO-8859-1 als Standardzeichensatz verwenden, muss eine Konvertierung der kompletten Datenbank und deren Inhalte nach UTF-8 stattfinden. Dafür sind im Folgenden zwei alternative Wege dargestellt.

  1. Es wird ein Speicherauszug der Datenbank mit dem Hilfsprogramm mysqldump erstellt. Danach wird die damit exportierte Datei nach UTF-8 konvertiert und wieder in das Datenbanksystem importiert. Auf der Linux-Shell sind dafür wenige Befehle notwendig:

    • mysqldump -h my_hostname -u my_username -pmy_password --default-character-set=latin1 --skip-set-charset my_database >latin1.sql
    • iconv -f ISO-8859-1 -t UTF-8 latin1.sql | sed -e 's/latin1_german2_ci/utf8_general_ci/g' | sed -e 's/latin1/utf8/g' >utf-8.sql
    • mysql -h my_hostname -u my_username -pmy_password --default-character-set=utf8 DATABASE <utf-8.sql

    Steht das Werkzeug iconv und sed nicht zur Verfügung, lässt sich alternativ der Datenbankauszug mit einem Texteditor laden und in UTF-8 speichern. Die Ersetzung der Zeichenkette „latin1“ in „utf8“ und einer Sortierfolge wie „latin1_german2_ci“ muss dann entsprechend mit Suchen und Ersetzen im Texteditor wie Notepad++ erfolgen.

  2. Die Alternative zum Konvertieren des Datenbankexports ist das Ändern des Zeichensatzes direkt in den Tabellen und Feldkonfigurationen per SQL-Anweisungen. Auf allen Ebenen lassen sich ALTER-Anweisungen durchführen, um die gesamte Datenbank auf UTF-8 umzustellen und dafür zu sorgen, dass auch neu angelegte Tabellen und Felder jeweils UTF-8 als Standardzeichensatz verwenden.

    • ALTER TABLE my_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

    Achtung: Die Anweisung CONVERT ändert ggf. den Datentyp eines Feldes, sofern die Größe nach Umstellung auf den neuen Zeichensatz nicht ausreicht, z. B. wird aus Feldern mit dem Datentyp TEXT nach Umstellung von ISO-8859-1 nach UTF-8 ein MEDIUMTEXT. Weitere Hinweise befinden sich in der MySQL-Dokumentation. Um die Anpassung der Datentypen zu vermeiden, müsste direkt auf Ebene der Felder in einer Tabelle eine Anpassung des Zeichensatzes erfolgen.

    • ALTER TABLE my_table MODIFY my_field TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;

In beiden Fällen ist am Ende die Datenbank selbst auf UTF-8 als Standard umzustellen, so dass zukünftige erzeugte Tabellen der Datenbank, automatisch mit den gewünschten Zeichen- und Sortiereinstellungen angelegt werden.

  • ALTER DATABASE my_database DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Damit der MySQL-Server standardmäßig mit UTF-8 als Zeichensatz arbeitet, lassen sich in der Konfigurationsdatei my.cnf von MySQL drei wesentliche Einstellungen vornehmen:

  • [mysqld]
  • character-set-server = utf8
  • collation_server=utf8_general_ci
  • default-character-set = utf8
  • .....

Neuere Versionen des MySQL-Servers sind bereits im Standard für UTF-8 konfiguriert, so dass diese Einstellungen entfallen. Wer unabhängig von den Servereinstellungen eine Client-Verbindung aufbauen möchte, sollte die Verbindung per SQL-Anweisung immer auf UTF-8 umstellen.

  • SET NAMES utf8;

Damit wird der Client-Verbindung mitgeteilt, die Daten als UTF-8 zu übertragen.

Inhalt

  1. Zeichensalat vermeiden - Teil 1 von 3
  2. Zeichensalat vermeiden - Teil 2 von 3
  3. Zeichensalat vermeiden - Teil 3 von 3

Zurück

Einen Kommentar schreiben