dedlfix: MySQL DB von latin1 auf UTF8 umstellen

Beitrag lesen

echo $begrüßung;

meine MySQL DB mit ca. 70 Tabellen ist momentan in latin1. Ich möchte nun gerne alles auf utf8 umstellen.
Sollte man jede Tabelle einzeln mit:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
umwandeln?

Das ist nur ein Default-Wert für neu zu erstellende Felder. Ebenso ist der Wert für eine Datenbank nur ein Default-Wert für die darin neu zu erstellende Tabellen. Letzlich zählt die Kodierung jedes einzelnen Feldes.

Oder wäre es besser einen Dump zu machen und dann im exportierten SQL File alle Zeilen mit "DEFAULT CHARSET=latin1" ersetzen durch UTF-8 ?

Den solltest du unabhängig von der gewählten Vorgehensweise machen. Beim Dumpen und beim Einlesen musst du auf die Angabe der korrekten Kodierung achten. Der phpMyAdmin dumpt immer in UTF-8, wenn du nichts angibst oder nichts angeben kannst (wenn iconv oder recode nicht installiert ist).

Eine schnelle augenscheinliche Prüfung der Kodierung ist über einen Browser möglich. Öffnen des Dumps über "Datei öffnen" und im Menü Ansicht die Zeichenkodierung auf UTF-8 oder Windows-1252 stellen (MySQLs Latin1 entspricht Windows-1252). Wenn alle Zeichen richtig zu sehen sind, kann man davon ausgehen, dass diese Kodierung vorliegt.

Gibt es irgend etwas zu beachten wegen den Daten an sich?

Solange die angegebenen Kodierung des Feldes mit der tatsächlichen Kodierung des Inhalts übereinstimmt, ist nichts zu beachten. Ein ALTER-Statement für die betroffenen Felder ist dann ausreichend.

Teilweise sind Wörter in französisch gespeichert also mit ',`,´ und anderen Zeichen.

Solange die verwendete Kodierung diese Zeichen beinhaltet ist das kein Problem.

eine Tabelle enthält verschlüsselte Passwörter mit Sonderzeichen. Können die nach der Umwandlung auch wieder gelesen werden, vorrausgesetzt der Client liest natürlich auch mit UTF-8

Ja, darf kein Problem darstellen, wenn du alles richtig gemacht hast.

Recht es wenn ich alle PHP Seiten auf
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
ändere?

Nein. Zum einen ist der HTTP-Header gleichen Namens stärker, zum anderen musst du bei der Kommunikation mit dem DBMS angeben, welchen Kodierung du auf dieser deiner aktuellen Verbindung zu verwenden gedenkst. Notfalls geht das für die ISO-8859- und Latin-Familie sowie UTF-8 mit einem "SET NAMES"-Statement, besser wäre die mysql_set_charachter_set() aus der MySQL-API zu verwenden oder deren Pendant in der jeweiligen Umgebung (z.B. PHP: mysql_set_charset() und mysqli_set_charset()). Ohne die explizite Aushandlung verwendet MySQL einen Default-Wert, was zu Datenverlust führen kann, weil es die Daten falsch interpretiert beziehungsweise ausliefert und weil beim Umkodieren der Daten zum Eintragen in die Felder technisch bedingt Zeichen verloren gehen können.

echo "$verabschiedung $name";