2010-01-27 117 views

回答

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

並希望你的數據庫不包含在「latin1」內的任何內容,如有關字符編碼的博客文章......否則你的用戶可能有一個理由訴訟,如果你的後期轉換網站突然提供錯誤的數據庫命令! – 2014-05-15 07:06:08

+0

在sed之後:uconv --from-code latin1 --to-code utf8 dump_utf.sql> dump_utf_fixed.sql – scribe 2015-06-05 01:10:22

+0

什麼是SED ????? – marcolopes 2017-08-04 01:44:39

37

對於單表,你可以做這樣的事情:

ALTER TABLE標籤轉換爲字符集是utf8 COLLATE utf8_unicode_ci;

整個數據庫的我不知道,比同類其他方法來這樣:

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

+18

對於沒有命令行訪問權限的用戶,可以快速在數據庫中運行'SHOW TABLES;',將它們粘貼到http://nimbletext.com/live的NimbleText中,然後使用該模式生成更改腳本:'ALTER TABLE \ '$ 0 \'CONVERT到CHARACTER SET utf8 COLLATE utf8_unicode_ci;' – jocull 2013-11-05 16:18:48

+0

我猜想關於nimbletext的提示可以挽救一些生命。投票! – James 2015-05-22 17:27:32

-1

與你的數據庫名稱

SELECT CONCAT代替my_database_name( 'ALTER TABLE',TABLE_NAME「轉換爲字符集utf8 COLLATE utf8_unicode_ci;')FROM information_schema.TABLES WHERE TABLE_SCHEMA ='my_database_name';

這將建立大量的查詢,您可以運行

相關問題