Ainsi, nous pouvions avoir un SPIP avec une base de données en UTF-8... Oui, mais faussement en UTF-8. La base et les tables avaient toujours un interclassement "latin1_swedish_ci" et les données avaient reçu un coup de utf8_encode() par SPIP. L'accentuation étaient par conséquent transformée, de telle manière que le "é" était devenu "é" et SPIP passait un coup de utf8_decode() pour que l'accentuation s'affiche correctement, en ayant vérifié au préalable la valeur du "charset" de la table "spip_meta".
Cette conversion n'est pas ce que l'on peut appeler de propre. Elle pouvait provoquer quelques problèmes avec le moteur de recherche où la recherche ne permettait pas de trouver des mots accentués.

Pour avoir une base propre, il faut que les données aient un jeu de caractères en UTF-8, et que la base, ainsi que les tables aient un interclassement "utf8_general_ci". Pour ce faire, il suffit d’exécuter les commandes suivantes :

mysqldump -u{identifiantBase} -p{motdepasseBase} --quote-names --set-charset --default-character-set=latin1 {nomBase} > {nomFichier1}.sql
cat {nomFichier1}.sql |sed -e 's/latin1/utf8/g' > {nomFichier2}.sql
mysql -u{identifiantBase} -p{motdepasseBase} {nomBase} < {nomFichier2}.sql


Une fois que c'est fait, vous n'avez plus rien à faire si votre SPIP est antérieur à un 2.x. Par contre, si vous avez un SPIP 2.x qui est issu d'un SPIP 1.9.x, il vous faut rajouter "mysql_query("SET NAMES 'utf8'");" dans le fichier "connect.php" dans le répertoire "config" pour que l'accentuation s'affiche correctement sur le site.

En fait, lors de la migration d'un SPIP vers un SPIP 2.x, SPIP ne migre pas totalement la table "spip_meta". Il manque des valeurs et c'est pour cette raison qu'il faut rajouter "mysql_query("SET NAMES 'utf8'");".
Si vous voulez vraiment avoir une base SPIP correcte, soit vous prenez la table "spip_meta" d'un SPIP 2.x, ce que je conseille, soit vous rajoutez 3 enregistrements dans cette table :

  • "charset_sql_base" avec la valeur "utf8"
  • "charset_collation_sql_base" avec la valeur "utf8_general_ci"
  • "charset_sql_connexion" avec la valeur "utf8"

Et vous n'aurez pas besoin de "mysql_query("SET NAMES 'utf8'");".

Après cette migration, vous obtenez une belle base de données à la SPIP 2.x.

NB : Bien-entendu, les 3 lignes de code peuvent être utilisées pour le même besoin sur une base de données Mysql autre que SPIP.