Convertir une base de données mySQL de latin1 vers UTF-8

Un problème fréquent quand on doit aborder l’internationalisation est la bonne gestion des différents charset. Quand vous utilisez du Java avec Maven, il est relativement simple de définir l’encoding des fichiers sources en UTF-8 mais le point courant d’échec et la base SQL.


Si vous utilisez mySQL et que vous avez des tables en latin1, mais que vous devriez avoir de l’UTF-8, utilisez ce petit script pour convertir du latin1 vers l’UTF-8 :

mysqldump --user=${USER} --password=${PASS} --default-character-set=latin1 --skip-set-charset ${DATABASE} > dump.sql;
sed -r ‘s/latin1/utf8/g’ dump.sql > dump_utf.sql
mysql --user=${USER} --password=${PASS} --execute=”DROP DATABASE ${DATABASE}; CREATE DATABASE ${DATABASE} CHARACTER SET utf8 COLLATE utf8_general_ci;”
mysql --user=${USER} --password=${PASS} --default-character-set=utf8 dbname < dump_utf.sql

Globalement, n'hésitez pas à toujours placer --default-character-set=utf8 dans toutes les commandes mySQL que vous exécutez.
N'oubliez pas non plus d'ajouter les paramètres "useUnicode=true&characterEncoding=UTF-8" à la fin de votre url de connexion jdbc pour vous assurez que vous vous connectez en UTF-8.