Chinaunix

标题: 【已解决】mysqldump导出gbk字符再恢复后不正确 [打印本页]

作者: byrcc    时间: 2012-11-06 16:18
标题: 【已解决】mysqldump导出gbk字符再恢复后不正确
本帖最后由 byrcc 于 2012-11-14 19:50 编辑

今天做主从一致检查,发现不同的数据,手动通过mysqldump同步一次,发现结果不正确。myqsldump和导入时mysql命令都使用--default-character-set=utf8选项。如下图,第一张图是源表,第二张图是使用dump文件导入到的另一个表。这两个表字符集为gbk,从显示来看,估计找个字段包含非gbk编码的字符。为什么数据会不一样?是否有人也遇到过同样的问题?


作者: du_liang    时间: 2012-11-12 13:00
导入导出你都使用gbk不行么
作者: byrcc    时间: 2012-11-14 15:04
本帖最后由 byrcc 于 2012-11-14 15:35 编辑

回复 2# du_liang
刚测试了一下,使用gbk导出再导入就没问题了。。好奇怪,按理说gbk编码的表用utf8导出再导入不该有问题呀?

查了下手册,mysqldump没有指定default-character-set的话,默认使用utf8。这样的话,应该是他这个gbk的字段中,包含了非法的gbk字符,才导致gbk到utf8转换出错
作者: byrcc    时间: 2012-11-14 19:50
又测试了一下,确认那个字段中有非gbk的字符,导致mysqldump时,如果不指定表的gbk编码,则发生gbk到utf8的转码,非法字符转码失败,导致导出的数据有问题
作者: du_liang    时间: 2012-11-14 21:56
回复 4# byrcc

如果不指定表的gbk编码,则发生gbk到utf8的转码,

你指定一下就可以了?  导入时指定?


   
作者: zhangshengdong    时间: 2012-11-15 09:43
导出的文件,使用命令看一下。

file -i filename

然后导进去的时候使用

如果filename是utf8
就用如下命令:
mysql --default-character-set=utf8 <filename

如果是gbk
就用如下命令:

mysql --default-character-set=gbk <filename


不可能有错,我都导入不知道多少遍,全部试线上环境
作者: byrcc    时间: 2012-11-22 15:02
回复 6# zhangshengdong
我这里的情况是,gbk编码的表中,有个字段包含非GBK字符,就是™这个,它在表中存的十六进制值是E284A2,你可以试试。

   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2