工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆

数据库编码处理

数据库编码处理
 
/usr/local/mysql/bin/mysqldump -uroot -p --default-character-set=latin1 --extended-insert=FALSE bbs > R_Dumpbbs.sql
 
sed -e '/^--/d' -e '/^\/\*/d' -e '/^$/d' -e 's/latin1_bin/utf8_bin/' -e 's/latin1/utf8/' R_Dumpbbs.sql > R_Dumpbbs_modi.sql
 
/usr/local/mysql/bin/mysql -uroot -p --default-character-set=gb2312 bbs < R_Dumpbbs_modi.sql
 

解释一下:
第一行是导出,其中latin1是原来数据库的编码,--extended-insert=FALSE是为了导出为多行Insert,不然可能因为Insert语句过长出错;
第二行修改,sed语句是把可能出错的一些内容删掉,还有把导入时设置的表和字段类型改成utf8;
第三行是导入,gb2312是输入文件用的编码类型,个人理解是这样的:原来数据库使用latin编码,但存储数据的时候是用gb2312,其间mysql会对其进行转换,所以导出的时候用的是latin编码,但是其中的内容其实是gb2312的,所以导入的时候采用gb2312编码,因为第二行中已经把标类型改成utf8了,所以建出来的表是utf8的,而数据会通过mysql自己把gb2312转成utf8,这样进到数据库中的数据就是utf8的了。
因为之前导出的时候没有使用--extended-insert=FALSE,造成导入超慢(虽然导出500m只用了不到5分钟),导了4小时了都还没100m,所以目前还在转,估计晚上的时候就会因为Insert语句太长处错了。
不过之前有拿其中一个表测试了一下,好像没问题(判断方法:在phpmyadmin底下看到的内容没有乱码)。
先这样,如果有新进展会继续更新的。如果有错,请指正。

PS:因为论坛白天的时候不能关,所以要再次导出要等到晚上了,使用--extended-insert=FALSE以后估计需要4小时才能导出,不过导入的时候可能只要半小时左右就可以了。
PS2:个人认为该方法并不局限于vbb数据库转码,可以适用于所有mysql数据的编码转换。
 
win下可使用类似如下语句处理。


mysqldump -uroot -p --quick --compatible=mysql40 --default-character-set=latin1 --extended-insert=FALSE test1 > d:/zzz.sql

mysql -uroot -p --default-character-set=gb2312 test2 < d:/zzz.sql

 
 
1.导出4.0兼容sql文件
 
2.导入到指定库
 
经过验证1G数据导出约10分钟不到 字符替换10分钟不到,导入约半小时。
此命令同时适合unix系统.

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8

发表评论

评论内容 (必填):