web-dev-qa-db-fra.com

Comment changer toutes les tables de ma base de données en jeu de caractères UTF8?

Ma base de données n'est pas en UTF8 et j'aimerais convertir toutes les tables en UTF8, comment faire?

28
nubela
mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql
14
nubela

Pour une table unique, vous pouvez faire quelque chose comme ceci:

ALTER TABLE tab CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Pour toute la base de données, je ne connais pas d'autre méthode que celle-ci:

http://www.commandlinefu.com/commands/view/1575/convert-all-mysql-tables-and-fields-to-utf8

39
Tomasz Zieliński

remplacer my_database_name avec le nom de votre base de données

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_TYPE != 'VIEW';

cela va générer beaucoup de requêtes que vous pouvez exécuter

Mieux encore, utilisez la trousse d'outils de Percona. J'auditerais vos indices avant de mettre à jour vers utf8mb4 car il y a des problèmes de longueur de clé.

SELECT CONCAT('pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8 
COLLATE utf8_unicode_ci" t=', TABLE_NAME, ',D=DB_NAME,u=USER_NAME --statistics --execute') 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'DB_NAME' AND TABLE_TYPE != 'VIEW' AND TABLE_COLLATION NOT LIKE '%utf8%';
0
tippingpints