Pixme : Conception de sites Internet sur mesure à Compiegne (Oise, 60) - Webmaster indépendant.

Vous êtes ici : Accueil > Pixme - Le blog > Convertir une base de données du latin1 (ou iso) en UTF8

Convertir une base de données du latin1 (ou iso) en UTF8

2 commentaires. Réagir.

Il y a de cela quelques années, les sites Internet francophones étaient conçus avec le jeu de caractères "iso-8859-1", également nommé "latin1". Vouloir convertir en UTF-8 peut se révéler compliquer... Ou pas !

Le contexte.

Comme beaucoup de webmaster, la plupart de mes anciens sites ont été codés avec le jeu de caractère latin1, appelé ISO-8859-1.

Or la norme aujourd'hui, la bonne pratique, c'est l'UTF-8, sans aucun doute.

Conséquence, refondre un site, ou bâtir un nouveau site sur une base existante pose de nombreux problème, et nécessite beaucoup de travail.

Le point le plus bloquant pour moi, celui ayant nécessité le plus de recherche est celui de la base de données.

J'ai eu beau chercher sur la toile, la conversion ne m'a paru nulle part très simple, et pourtant, il y a une méthode d'une simplicité extrême !

Dans le vif du sujet :

Vous avez une base que vous administrez avec PhpMyAdmin ? Alors commençons !

Etape 1, exporter la base :

Menu "exporter", sélectionnez toutes les tables, cochez la case "transmettre" puis cliquez le bouton "Exécuter". Vous obtenez un fichier SQL à enregistrer sur votre ordinateur.

Etape 2 : Convertir les caractères encodés :

Certains logiciels font ça très bien... D'autres pas. Si le vôtre ne le fait pas, quelques "rechercher/remplacer" peuvent faire l'affaire, il n'y a généralement pas beaucoup de caractères concernés, en voici quelques exemples :

  • les voyelles accentuées : é => é, è => è, ê => ê, et ainsi de suite avec les "a", les "u", les "o" et les i.
  • Les cédilles : ç => ç
  • les guillemets ("),
  • les euros (€ => €)
  • bref tout ce qui commence par "&". Ici une petite liste en exemple.

A noter, il est possible que vous ayez aussi converti les apostrophes (par des '). Auquel cas, je vous invite à les remplacer par antislash+apostrophe (\').

Etape 3 : Supprimer toute notion de latin / ISO :

A nouveau un bête rechercher/remplacer :

Rechercher dans le fichier SQL toute notion de "collate" et la supprimer purement et simplement. Ensuite, remplacer toute notion de latin (dans le charset) par l'UTF8. Par exemple :

CREATE TABLE `annonces` (
  `id` int(11) NOT NULL auto_increment,
  `datesql` date NOT NULL default '0000-00-00',
  `type` set('A','V','E') collate latin1_german2_ci NOT NULL default '',
  `modele` varchar(20) collate latin1_german2_ci NOT NULL default '',
  `titre` varchar(200) collate latin1_german2_ci NOT NULL default '',
  `desc` text character set latin1 NOT NULL,
  `pro` set('O','N') collate latin1_german2_ci NOT NULL default 'N',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci ;

va devenir :

CREATE TABLE `annonces` (
  `id` int(11) NOT NULL auto_increment,
  `datesql` date NOT NULL default '0000-00-00',
  `type` set('A','V','E') NOT NULL default '',
  `modele` varchar(20) NOT NULL default '',
  `titre` varchar(200) NOT NULL default '',
  `desc` text  NOT NULL,
  `pro` set('O','N') NOT NULL default 'N',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8 ;

Cela pour chacune de vos tables.

Etape 5 : Préparer une nouvelle base et ré-importer :

On va commencer par préparer notre base de données : Dans PhpMyAdmin, allez dans le menu "Opérations" (en haut à droite), et choisissez pour l'interclassement l'UTF8 ("utf8_general_ci" pour ma part) puis exécutez. Cela permettra, à l'avenir, d'avoir l'UTF8 en jeu de caractères par défaut !

Allez ensuite dans l'onglet "Importer" (selon les versions, sinon allez dans l'onglet SQL).

Avez le bouton parcourir, allez cibler votre fichier SQL modifié. Pour mémoire, notre fichier est nativement en UTF8. Mais c'est là que réside toute l'astuce :

Dans la partie "jeu de caractère du fichier", choisissez "latin1", puis Exécutez !

A ce stade, si vous regardez votre base sous PhpMyAdmin, vous pourrez pensez que vos fichiers ne sont pas bons... Mais en réalité, une fois vos scripts PHP convertis à l'UTF-8, alors l'affichage sera correct :-)

Enjoy ;-)

Publié le 21 Février 2012.

Viadeo

Partager cette page sur : Ajouter à facebook. Ajouter à twitter. Ajouter à viadeo. Ajouter à LinkedIn.

Commentaires

[ le 26 Juin 2012 ]
Par MisterZ :
ce site n'est plus actualisé?
[ le 05 Février 2013 ]
Par zlika :
Houaou merci bien !
J'ai eu du mal à avaler l'astuce mais ça marche !

Ajouter un commentaire :

(20 caractères maximum).

(en chiffres)