Latin1 vers UTF-8
Posté le mer. 29 mai 2013
Voilà une solution simple pour convertir une base de donnée en Latin1 vers de l'UTF-8.
Utiliser mysqldump avec les options suivantes :
--default-character-set=utf8
et :
--skip-set-charset
Voilà la commande complète :
mysqldump -u user -p base table --default-character-set=utf8 --skip-set-charset > base_table.sql
Ensuite en utilisant vim je fais un rechercher / remplacer des différents latin1 en utf-8. :
vim dump_base_table.sql
Et en mode commande :
:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
et :
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
on enregistre et quitte le fichier avec :wq (ou sinon avec ZZ).
Maintenant on réimporte la table grâce à mysql :
mysql -u user -p base < dump_base_table.sql
il reste a vérifier si les champs sont bien en UTF-8.
Ici une table « table » avec une colonne « col » on ajoute un caractère accentué. :
INSERT INTO table VALUES("é");
Maintenant on regarde la taille de la colonne :
SELECT `col`, length(`col`) FROM `table`;
Si la taille = 1 le caractère est enregistré en latin1… si c'est 2 c'est bien de l'UTF-8 car sauvé sur 2 octets.
Merci à Mathieu Agopian pour le dernier tips.