phpmyadmin备份的数据导入后乱码

   公司的部分项目使用了latin1的字符编码,为了方便搜索,包含中文的字段设置了binary参数。但我发现用phpmyadmin备份的数据导入后竟然是乱码。上网查找了一番后发现是phpmyadmin-2.10*(具体是哪个版本有了变化我没有去测试)及之前版本,在导出数据时有“二进制区域使用十六进制显示”并且是默认选中的。结果导出的数据文件中,设置了binary参数的字段显示为“0x**”状,但是再用phpmyadmin导加数据库这些字段却显示乱码,即使用命令行方式,正确设置连接编码,也是乱码。但是如果不选择“二进制区域使用十六进制显示”导出的数据文件中文是乱码,但是用phpmyadmin导入后,数据是正常的(要用命令行方式并指定字符编码)。
  该问题只存在于phpmyadmin-2.10*及之前版本,后续版本,将该项变更为“Use hexadecimal for BLOB”即只对blog类型的数据进行二进制转换。
  分析phpmyadmin源码后发现是程序将带binary参数的字段进行了二进制编码,调用了bin2hex函数。但是因为phpmyadmin在导出时使用的连接编码不是字段的编码,即导出的数据成了“乱码”再对这些乱码的数据进行二进制编码,最后就产生了对我们没有意义的乱码数据。我曾尝试用多种方法对这此数据进行处理,最终发现都无法得到原始的正常中文。
  但是我最后发现将其用pack函数(pack('H*', 去掉0x后的数据)处理后的数据和不选择“二进制区域使用十六进制显示”时导出的数据是相同的。这样问题似乎就可以间接的解决了。
  本人写了一个小程序用于处理选择了“二进制区域使用十六进制显示”导出的数据。将“0x**”转换成phpmyadmin能接受的“乱码”数据,再用phpmyadmin导入。进命令行查询,出现了正常的中文。
  程序地址:
   http://aaliwen.awardspace.com/converthexbinary.php
   http://aaliwen.freehostia.com/converthexbinary.php
注意:本从提供了两种在线转换程序,最后一种您可以自己组建PHP运行环境来处理您本地的文件。虽经本人测试正常,但也请您先行测试后再使用生成的数据。生成的数据请用原版(未使用本人制作的修正补丁)phpmyadmin进行导入。
  如有问题,请及时与我联系:aaliwen@126.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值