Conversion encoding base MySql
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
.
Votre avis
Nobody voted on this yet
|
|
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.
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 <,USER_LOGIN> sera alors demandé.
Le fichier dump.sql
contient alors la définition de la table.
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
enDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
; -
DEFAULT CHARSET=latin1
enDEFAULT 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
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 <,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.
Voir aussi
Exemple simple Dans cet exemple, l'export et chargement sont réalisés en une seule ligne de commande.