背景:某个操作系统的Mysql数据库数据库Databnsednname采用默认的latin1字符集,操作系统升级需求将所有数据转换成utf-8各式,目的数据库Databnse为newdbname(建库时应用utf8)
方法一:
步骤一 命令行执行:Mysql数据库dump –opt -hlocalhost -uroot -p*** –default-character-set=lantin1 dbname > /usr/local/dbname.sql
步骤二 将 dbname.sql文档中的create table语句的CHARSET=latin1改为CHARSET=utf8
步骤三 在dbname.sql文档中的insert语句之前加一条’set names utf8;’
步骤四将dbname.sql转码为utf-8各式,意见应用UltraEditor,能够直接应用该编辑器的’转换->ASCII到UTF- 8(Unicode编辑)’,或者将文档另存为UTF-8(无BOM)各式
步骤五 命令行执行:Mysql数据库 -hlocalhost -uroot -p*** –default-character-set=utf8 new_dbname < /usr/local/dbname.sql
总结:这种窍门有个致命之处就当数据中有大量汉文字符和更多有联系特殊符号字符时,很有估计导致在 [步骤五]时报错导致无法正常导入数据,假如数据库Databnse较量大能够分别对每张表执行上述步骤
方法二(推荐大部份人应用):
为 了解决NO·1种窍门中总结时说到的疑难问题,在网上苦苦查找了一天资源才东拼西凑的搞出唯一较量稳妥的解决窍门
步骤一将待导出的数据表的表框架导出(能够用Phpmyadmin、Mysql数据库dump等,很简单就不说了),然后将导出的create table语句的CHARSET=latin1改为CHARSET=utf8,在目的库newdbname中执行该create table语句把表框架建好,接下来开端导出-导入数据
步骤二 命令行:进入Mysql数据库命令行下,Mysql数据库 -hlocalhost -uroot -p*** dbname
步骤三 执行SQL select * from tbname into outfile ‘/usr/local/tbname.sql’;
步骤四将tbname.sql转码为utf-8各式,意见应用UltraEditor,能够直接应用该编辑器的’转换->ASCII到UTF- 8(Unicode编辑)’,或者将文档另存为UTF-8(无BOM)各式
步骤五 在Mysql数据库命令行下执行语句 set character_set_database=utf8; 注:设置Mysql数据库的环境变量,那样Mysql数据库在下一步读取sql文档时将以utf8的形式去解释该文档内容
步骤六 在Mysql数据库命令行下执行语句 load data infile ‘tbname.sql’ into table newdbname.tbname;
留意:千万不能忘了第四步
采用第二种窍门,所有数据均正常导入,且各式转换胜利没有乱码
方法三:
别人的今天问起,随手转了一下,很简单,这里截图说明一下
用phpmyadmin导入库test中后发现,这个库中有UTF8和latin1两种编码,如下图
先把test备份为test1库,在WIN下操作的话就是把:路径\MySQL\data下的test目录备份一下,改名为test1目录
在phpmyadmin中把所有为UTF8的表删除,在命令行中运行
D:\PHPServer\MySQL\bin>mysqldump -uroot -p –quick –compatible=mysql40 –default-character-set=latin1 –extended-insert=FALSE test > /root/test.sql
说明一下D:\PHPServer\MySQL\bin是我的安装目录,test为数据库,d:/test.sql为生成的数据文件,程序会提示你输入root的用户密码,输入后,等几分钟,test.sql就生成好了
通过phpmyadmin建立一个新库,库名:test2 ,采集字符集设定为utf8-general-li
再将刚才生成sql文件导入新数据库
D:\PHPServer\MySQL\bin>mysql -uroot -p –default-character-set=utf8 test2 < /root/test.sql
输入root密码,等几分钟,zxs.sql就导入成功了,到这还没完,因为这里只是把latin1编码的转换为utf8了
最后,停止mysql,把test2目录下的所有文件覆盖到我们刚刚备份的test1目录下,这样,test1目录就是我们要得到了转换好了的UTF8数据库了,OK,收工
当然,方法很简单,就是把latin1编码的表单独分离出来转为UTF8后再盖原来的库,这样多种编码也都可以完美的转换,这种情况也非常常见,换主机,升mysql版本等都会出现这种情况的。
图片挂了,请修复