vendredi, novembre 08, 2024
Nom d'utilisateur : Mot de passe :
Home > Dossiers > Administration système > Réparer une base MySQL ayant un mélange de charsets
[NEWS]
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 :

$ 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


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

Réparer une base MySQL ayant un mélange de charsets
Vous pourriez commenter si vous aviez un compte !