Conversion encoding base MySql

De EjnTricks

Lors de la création d'une base de données, il faut sélectionner l'encoding des tables. Parfois, un choix initial peut être une erreur et il est nécessaire de modifier cet encoding. La modification de la définition de la table permet de l'effectuer, mais cela n'aura aucun impact sur les données déjà enregistrées.

Cet article présente la marche à suivre pour effectuer cette conversion depuis un serveur Ubuntu, avec une conversion depuis latin1 vers utf8.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Objectifs

La manipulation est globalement simple. Il faut dans un premier temps effectuer un export de la base vers un fichier. Puis ce fichier est modifié afin de changer la définition des tables.

Puis, la base est modifiée et peuplée avec le script de l'export. Il parait évident que dans le cadre d'une base important, cela peut être couteux en temps, donc autant ne pas se tromper dès le départ.


Backup-icon.png Export

La première étape consiste donc à exporter toutes les données ainsi que les définitions des tables.

#mysqldump --add-drop-table -u <USER_LOGIN> -p -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B <DATABASE_NAME> > dump.sql

Le mot de passe du compte &lt,USER_LOGIN> sera alors demandé.

Le fichier dump.sql contient alors la définition de la table.


Icon Personnalisation.png Modification

Puis le contenu doit être modifié. Le plus simple est d'utiliser la commande sed, avec les expressions régulières de remplacement. L'objectif est de changer les valeurs suivantes.

  • DEFAULT CHARACTER SET latin1 en DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • DEFAULT CHARSET=latin1 en DEFAULT CHARSET=utf8.

La commande suivante est exécutée

#sed 's/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/' < dump.sql | sed 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/' > dump-utf8.sql

Le fichier dump-utf8.sql contient alors les définitions modifiées


Backup-restore.png Chargement

Enfin, une fois les modifications apportées, il suffit d'injecter les données dans la base depuis le fichier.

#mysql -u <USER_LOGIN> -p < dump-utf8.sql

Le mot de passe du compte &lt,USER_LOGIN> sera alors demandé.

Du fait de l'extraction, la définition de la base est également exportée et recréée lors de l'injection.


Viewer icon.png Voir aussi

Exemple simple Dans cet exemple, l'export et chargement sont réalisés en une seule ligne de commande.

Tutorial sur Moodle