2010-01-27 8 views

Répondre

12
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 
+9

Et nous espérons que votre base de données ne contient pas « latin1 » à l'intérieur de tout contenu, tels que les messages de blog sur le codage des caractères ... sinon vos utilisateurs peuvent avoir des raisons de procès si votre site de post-conversion offre soudainement des commandes de base de données erronées! –

+0

après le sed: uconv --from-code latin1 --to-code utf8 dump_utf.sql> dump_utf_fixed.sql – scribe

+0

Qu'est-ce que SED ????? – marcolopes

37

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

ALTER TABLE onglet CONVERT À CARACTÈRE Utf8 COLLATE utf8_unicode_ci;

Pour la base de données ensemble, je ne sais pas autre méthode que semblable à ceci:

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

+18

Pour ceux qui n'ont pas accès à la ligne de commande, vous pouvez rapidement lancer 'SHOW TABLES;' dans votre base de données, les coller dans NimbleText sur http://nimbletext.com/live puis utiliser ce modèle pour générer le script de modification: 'ALTER TABLE \ '$ 0 \' CONVERTI POUR PERSONNALISER ensemble utf8 COLLATE utf8_unicode_ci; ' – jocull

+0

Je pense que cette astuce à propos de nimbletext sauver des vies. Votez! – James

-1

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

SELECT CONCAT ('ALTER TABLE', TABLE_NAME, ' CONVERT TO CHARACTER ENSEMBLE utf8 COLLATE utf8_unicode_ci; ') FROM schéma_d'information.TABLES WHERE TABLE_SCHEMA =' nom_base_données_mon_ ';

Cela va construire beaucoup de requêtes que vous pouvez exécuter

Questions connexes