La conversion va se faire en trois étapes : créer une sauvegarde de la base, convertir cette sauvegarde, et la recharger. Attention, on utilise pour faire cela des outils UNIX ; ça a été testé sous GNU/Linux, et ça devrait marcher ailleurs (tels que FreeBSD, ou Cygwin sous Windows), mais je ne vous promets rien :-) Allez, c’est parti !
Dump de la base
Cela se fait très facilement par le programme mysqldump [1] :
$ mysqldump -a -Q -q -c -u <user> -p --add-drop-table --add-locks -v <db_spip> > spip-20030718-iso8859-1.dumpRemplacez évidemment <user> et <db_spip> par l’utilisateur et la base de données de votre site SPIP.
Attention, à partir de maintenant, toute modification faite sur le site ne sera pas prise en compte. Il convient donc de prévenir les auteurs et les autres administrateurs, si besoin est.
Conversion en UTF-8
UTF-8 est une manière (la plus utilisée en fait) d’encoder de l’Unicode. Attention cependant, si vous avez déjà des bouts d’Unicode dans votre base, allez d’abord voir la dernière partie de cet article !
Pour faire notre conversion, on va utiliser iconv, dont c’est la fonction principale :
$ iconv -f ISO8859-1 -t UTF-8 spip-20030718-iso8859-1.dump > spip-20030718-UTF-8.dumpEt voilà !
Importation du dump converti
Puisqu’on a utilisé --add-drop-table lors de notre sauvegarde, on peut facilement utiliser directement le dump converti. Pour faire cela, deux méthodes.
Se connecter d’abord à MySQL, puis charger le dump avec la commande source :
$ mysql -u<user> -p <db_name>
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4830 to server version: 3.23.49
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> source spip-20030718-UTF-8.dump
La deuxième méthode est plus courte :
$ mysql -u<user> -p <db_name> < spip-20030718-UTF-8.dumpEt voilà, « théoriquement », c’est bon :-)
Une partie de l’ancienne base est déjà en UTF-8 !
Et oui, cela arrive... Notamment lorsque comme nous, à MiNET, vous utilisez un rugbyman comme webmaster, qui active le mode UTF-8 de SPIP avant que la base ne soit convertie.
Cela nécessite un peu plus de travail, mais Perl va venir à notre rescousse. Le truc est de convertir certains caractères UTF-8 en ISO8859-1 :
$ perl -MEncode -pe 'for $a qw(à è ì ò ù À È Ì Ò Ù ä ë ï ö ü Ä Ë Ï Ö Ü á é í ó ú ç Á É Í Ó Ú Ç ÿ â ê î ô û Â Ê Î Ô Û ß » « ¢) { $c = encode ("UTF-8", $a) ; s/$c/$a/g ; } print;' spip-20030718-iso8859-1.dump > spip-20030718-iso8859-1-real.dumpRajoutez évidemment tous les caractères que vous pensez avoir utilisés après le passage de SPIP en Unicode (je pense notamment au caractère euro, que je ne peux pas produire avec ce clavier US :-).
Et vous pouvez ensuite procéder avec iconv sur ce nouveau fichier ! [2]

























