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.