Changer l'encodage d'une base de données MySQL

On avait un site multilingue dont l'affichage en russe déconnait, la faute à notre base de données qui était en latin1.

Voici la procédure utilisée pour tout nettoyer comme il faut et convertir en utf8.

Backup de la base

mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
cp dump.sql dump-fixed.sql
vi dump-fixed.sql

Rechercher / remplacer dans le fichier ouvert dans vi

:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq

Suppression de la base de données et recréation en utf8

DROP DATABASE dbname;
CREATE DATABASE dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Réimport de la base au format utf8

mysql -uusername -ppassword --default-character-set=utf8 dbname< dump-fixed.sql
Vus : 5802
Publié par Nicolas Lœuillet : 125