Nous pouvons être amené à changer l'encodage complet de la base de donnée d'un site lorsque nous souhaitons proposer un site multi langues avec l'utilisation de caractères spécifiques, ou pour utiliser un plugin particulier par exemple.
En suivant les étages ci dessous, fortement inspirée par la méthode décrite par Mark Evans de www.gllabs.org, vous devriez être en messure de réussir cette opération effectuée sous windows XP.
Avant toute opération sur la base de données empécher les visiteurs de votre site de se connecter à celle-ci Dans le config.php,
$_CONF['site_enabled'] = false;
Faite aussi une sauvegarde de cette base de données que vous mettrez de coté. Profitez en pour sauvarger votre thème (layout) ainsi que les fichiers customisé (config.php, lib-custom.php…).
Avec phpmyadmin par exemple, dans l'onglet “Exporter” sélectionner la base de données en question, cocher “Transmettre”. La base de donnée est alors sauvegarder sur votre disque dur avec l'extension .sql (localhost.sql)
Ouvrir le fichier avec Notepad ++, dans le menu Recherche sélectionner remplacer. Saisir Rechercher: CHARSET=latin1 et Remplacer par : CHARSET=utf8. Cliquer sur remplacer tout. De même vérifier que les COLLATE soit utf_general_ci
Vers la ligne 15 supprimer les 2 lignes suivantes (si nécessaire) :
CREATE DATABASE `**********` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `*********`;
Puis enregistrer le fichier.
Vérifier que tous les caractères de la base soit au format UTF-8. Pour cela utiliser le programme libiconv disponible dans l'outil GetText. Saisir la commande suivante dans la console de ligne de commandes :
iconv –c –f utf-8 –t utf-8 < input.sql > output.sql
où input.sql est le nom du fichier source et output.sql le nom du fichier un fois les caractères convertis. Ouvrir le fichier output.sql avec Notepad ++.
A l'aide de phpmyadmin changer l'interclassement pour la connexion MySQL, choisissez utf_general_ci
Toujours avec phpmyamdmin : Supprimer (drop) toutes les tables de la base de données. Ne supprimez pas la base de données.
Avec la fonction Importer de phpmyadmin, importer le fichier output.sql sélectionner le jeu de caractères du fichier utf-8. Vérifier ensuite dans l'onglet structure que l'interclassement est maintenant utf8_general_ci.
Dans le config.php changer le language par défaut :
$_CONF['language'] = 'french_france_utf-8'; $_CONF['default_charset'] = 'utf-8'; $_CONF['locale'] = 'fr_FR.utf-8';
Supprimer toutes les traductions qui ne sont par utf-8.
Avec phpmyadmin il faut modifier tous les utilisateurs qui on sélectionné un language non utf-8. Pour cela sur la table gl_users après avoir visualisé les languages à modifier, cliquer sur l'onglet SQL et saisir la requête (query) :
UPDATE gl_users set language="english_utf-8" WHERE language="english";
Répéter l'opération pour chaque language.
Rendre le site accessible puis afficher quelques billets et quelques posts du forum pour vérifier que tout est en ordre et les caractéres bien affichés. Vérifier aussi les flux de syndication.