以前就发现用mysqldump导出来文本文件会出现中文乱码,但是再直接导入到新的DB里后,相应字段也不会出现乱码,原因未明。

    前两天用mysqldump导数据,导出来的数据只需要保留部分记录。所以就手工删除部分insert的内容。然后导进新的DB,发现中文竟是乱码。本以为是因为mysqldump导出文本文件就是乱码,然后试了在导出的时候给mysqldump加--default-character-set=utf8/gbk/latin2等方法,dump出来的文本文件依然是乱码。再导进新DB还是出现乱码。后面有查了下,发现了再导入时加--default-character-set=utf8的方法,然后果断去试了,结果问题解决了。需要补充下,旧的DB里每个表都加了默认字符集为latin2,但是字符型字段都设置为utf8了。据我分析,mysqldump的时候直接把字符串的内容(可能是内存值什么的)导出来保存在文本,直接导入的时候会再把这个内容导进去,也不会出现乱码。但是如果对dump出来的文件进行了修改,则由于文本编辑器不识别原来的字符串内容,对该内容有一定的破坏,造成导入的时候把该内容当做了字符串,而后有中文的字段就会变成乱码。而在导入的时候设置了字符集,导入过程就会识别该内容,不将其当做普通字符串来处理,这样乱码问题就解决了。

    由于对字符编码了解甚少,以上分析纯属个人随便猜测,真心希望得到认定、纠正或拍砖。