2010-01-27 8 views

Antwort

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

laufen und hoffentlich Ihre Datenbank enthält keine „latin1“ innerhalb jeder der Inhalte wie Blog-Posts über Zeichenkodierung ... sonst die Benutzer Gründe für eine haben Klage, wenn Ihre Post-Conversion-Website plötzlich fehlerhafte Datenbankbefehle anbietet! –

+0

nach dem sed: uconv --from-code latin1 --to-code utf8 dump_utf.sql> dump_utf_fixed.sql – scribe

+0

Was ist SED ????? – marcolopes

37

Für einzelne Tabelle, die Sie so etwas tun kann:

ALTER TABLE Tab CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Für die gesamte Datenbank Ich weiß nicht, andere Verfahren als die ähnlich wie diese:

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

+18

Für Benutzer ohne Befehlszeilenzugriff können Sie 'SHOW TABLES;' schnell in Ihrer Datenbank ausführen, sie in NimbleText unter http://nimbletext.com/live einfügen und dann mit diesem Muster das Änderungsskript generieren: 'ALTER TABLE \ '$ 0 \' IN CHARAKTERSATZ UMGEBEN utf8 COLLATE utf8_unicode_ci; ' – jocull

+0

Ich schätze, der Tipp über Nimbletext rettet einige Leben. Bis abstimmen! – James

-1

my_database_name Name mit Ihrer Datenbank

SELECT CONCAT ('ALTER TABLE', TABLE_NAME, ersetzen ' IN CHARAKTERSATZ UMGEBEN utf8 COLLATE utf8_unicode_ci; ') FROM information_schema.TABLES WHERE TABLE_SCHEMA =' my_database_name ';

dies viele Abfragen erstellen, die Sie