[oracle]今天经历的坑

今天接到的任务:需要处理比对第三方提供的姓名和XX号码,由于信息保密特殊原因,这些数据给到我们这边是通过md5加密的,需要我们匹配我方内部数据是否有对方提供的信息是否核对,

任务需求:匹配加密字段是否一致

任务分析:1.对方文件A  字段 a b c ,其中abc都是通过function md5加密  

                  2.我方文件 B 通过字段 a b c ....。abc为明文 需要关联匹配的A表 

步骤:

    1.将A表和B表导入oracle

    2.使用function对B表a字段加密 生成 md5_a 

    3.对比 A.a=B.md5_a 等这个个字段比值,获取 B中 party_id 进行后续处理。

坑:

1.导入匹配后,发现一个也匹配不上。以为是function md5方法问题,后经过跟第三方比对使用同一字符串进行加密,比对加密后字符串发现没有问题。后跟第三方沟通确认,应该是提供的加密数据有问题。

2.第二次发过来,发现通过inner join 关联2个表,反而匹配的字段数过多。研究发现,仅通过字段值a 有过多重复数据,不能有效匹配数据,因此需使用 a和b同时进行匹配。  b是汉字模块。

3.对 A.a=B.md5_a and A.b=B.md5_b 进行比对时,新问题出现了 一个也匹配不上。经过反复对比,发现我跟第三方使用同样的function对相同汉字进行加密,加密结果不同。继续研究,发现是双方数据库characterset字符集不一样造成的。我使用的是zh16gbk 对方使用 al32utf8 

解决方案:修改数据库字符集显然不太合适,临时找或者新建数据库也不现实。后来使用了convert函数解决了字符串编码问题。

select md5(convert(B.b,'AL32UTF8') from B;

 

参考文档;http://blog.itpub.net/30393770/viewspace-1869124/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值