Envoyé par unreal
Par exports successifs, il est possible que vous ayez affaire un jour à une base MySQL mélangeant plusieurs charsets (latin1 et UTF-8 par exemple). Ce dossier a pour but de vous aider à réparer une telle base avec un effort minimal.
Dans cet exemple nous supposons que le but est d'obtenir une base homogène en latin1 (iso) et que votre base ne contient que des champs 'texte' (pas de BLOB).
Commencez par régler votre console en UTF-8 si ce n'est pas déjà fait :
Vérifiez que vous pouvez bien écrire des caractères accentués ; il se peut que vous ayez besoin également de configurer le terminal en UTF-8.
Utilisant mysqldump, exportez la ou les tables à réparer :
Vous allez maintenant utiliser sed pour remplacer les caractères en UTF-8 par l'équivalent en ISO :
Il ne reste plus qu'à ré-importer :
Historique :
- 20090831 : version initiale
Dans cet exemple nous supposons que le but est d'obtenir une base homogène en latin1 (iso) et que votre base ne contient que des champs 'texte' (pas de BLOB).
Commencez par régler votre console en UTF-8 si ce n'est pas déjà fait :
$ export LANG=en_US.UTF-8
Vérifiez que vous pouvez bien écrire des caractères accentués ; il se peut que vous ayez besoin également de configurer le terminal en UTF-8.
Utilisant mysqldump, exportez la ou les tables à réparer :
$ mysqldump -u root -p --default-character-set=latin1 <nom de base> <nom de table> > /tmp/dump.sql
Vous allez maintenant utiliser sed pour remplacer les caractères en UTF-8 par l'équivalent en ISO :
$ cat /tmp/dump.sql | sed \
-e "s/à/`echo -n 'à' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/é/`echo -n 'é' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/è/`echo -n 'è' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ê/`echo -n 'ê' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ë/`echo -n 'ë' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/î/`echo -n 'î' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ô/`echo -n 'ô' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ù/`echo -n 'ù' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ç/`echo -n 'ç' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/À/`echo -n 'À' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/É/`echo -n 'É' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/È/`echo -n 'È' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ê/`echo -n 'Ê' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ë/`echo -n 'Ë' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Î/`echo -n 'Î' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ô/`echo -n 'Ô' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ù/`echo -n 'Ù' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ç/`echo -n 'Ç' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" > /tmp/dump-1.sql
-e "s/à/`echo -n 'à' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/é/`echo -n 'é' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/è/`echo -n 'è' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ê/`echo -n 'ê' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ë/`echo -n 'ë' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/î/`echo -n 'î' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ô/`echo -n 'ô' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ù/`echo -n 'ù' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/ç/`echo -n 'ç' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/À/`echo -n 'À' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/É/`echo -n 'É' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/È/`echo -n 'È' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ê/`echo -n 'Ê' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ë/`echo -n 'Ë' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Î/`echo -n 'Î' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ô/`echo -n 'Ô' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ù/`echo -n 'Ù' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" \
-e "s/Ç/`echo -n 'Ç' | iconv --from-code=UTF-8 --to-code=ISO-8859-15`/g" > /tmp/dump-1.sql
Il ne reste plus qu'à ré-importer :
mysql -u root -p <nom de base> < /tmp/dump-1.sql
Historique :
- 20090831 : version initiale
Posté le 31/08/09 à 15:10