dedlfix: MySQL: Alles nach UTF-8 Umwandeln

Beitrag lesen

echo $begrüßung;

Jetzt die Frage: Wie kann ich alle Zeichenketten in meiner Datenbank sicher ins UTF-8 Format umwandeln?

Ich hatte das vor kurzem bei einem Projekt mit MySQL. Es gibt viele Infos, unter anderem TIP Convert latin1 to UTF-8 in MySQL.

In dem Artikel sind einige überflüssige Schritte enthalten. Er fängt auch schon falsch an. Das Default-Charset ist immer noch Latin1. Nur bei Gentoo hatte man irgendwann mal die Konfiguration auf UTF-8 umgestellt, wenn man nicht mit dem USE-Flag latin1 installierte.

Aktuelle Ausgaben des Tools mysqldump schreiben an den Anfang der Datei, welche Zeichenkodierung vorliegt. Die wird beim Importieren berücksichtigt. Man muss damit weder beim Export noch beim Import zeichenkodierungsrelevante Optionen angeben und das Konvertieren des Dumps ist auch überflüssig. Wenn ich mich recht erinnere, war das aber noch nicht seit Beginn (= 4.1) so.

Der phpMyAdmin schreibt keine Zeichenkodierungsinformation in seine Export-Daten. Hier muss man beim Import immer die zum Export verwendete Kodierung angeben.

Kommt man von einer Version 4.0 oder kleiner, hat man einen Latin1-kodierten Dump vorliegen. Beim Importieren gibt man das mit --default-character-set=latin1 an und fertig ist.

Möchte man die Kodierung der Felder umstellen, ändert man nur deren Kodierungsangabe. MySQL kodiert dabei selbständig um. Solange die alte Kodierungsangabe auch mit dem Inhalt übereingestimmt hat, gibt es dabei keine Probleme (wenn in der Zielkodierung alle Zeichen darstellbar sind).

Ansonsten ist man mit zwei einfachen Regeln problemfrei: Mit der gewählten Kodierung für ein Feld muss man alle gewünschten Zeichen darstellen können. Wenn ein Client mit dem Server kommunizieren will, sollte er die zu verwendende Kodierung nach dem Verbindungsaufbau explizit aushandeln.

echo "$verabschiedung $name";