2010-01-27 73 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';

这将建立大量的查询,您可以运行

相关问题