MySQL-Datenbank von Latin1 zu UTF8 konvertieren
Es kam der Wunsch auf, in eine bestehende Datenbank Sonderzeichen aus anderen Sprachen speichern zu können. Das schlug mit Latin1 fehl.
Die Lösung schien also UTF8 zu sein – der Weg dorthin war steinig.
Daher hier mal die Befehle, die nacheinander ausgeführt werden müssen, und bei mir zum Ergebnis geführt haben.
mysqldump -h SERVER --user=USER -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset -r dump.sql DB_NAME
iconv -f ISO8859-1 -t UTF-8 dump.sql > dump_utf8.sql
perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' dump_utf8.sql
mysql --user=USER -p --execute="DROP DATABASE DB_NAME" -h SERVER
mysql --user=USER -p --execute="CREATE DATABASE DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci;" -h SERVER
mysql --user=USER --max_allowed_packet=16M -h SERVER -p --default-character-set=utf8 DB_NAME < dump_utf8.sql
USER, SERVER und DB_NAME müssen natürlich ersetzt werden.