DB2和oracle数据库char和varchar类型作为检索条件时的差异

本文探讨了DB2与Oracle数据库在使用不同连接方式时,char和varchar类型的检索差异。重点对比了PreparedStatement与Statement的不同行为,并讨论了空字符串与NULL值的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 申明:这里只说了两种库的连接方式下。char和varchar类型作为检索条件时的差异      
                1,Statement stmt0=conn.prepareStatement(sql);         
                2,Statement stmt = conn.createStatement();      
    上面两种方式是不一样的。      
               第一种方式【prepareStatement】连接方式oracle里面是按真实值进行比较或者说按实际长度进行比较,而在DB2中时按空格补齐原则进行比较      
               第二种方式【Statement】连接方式oracle和DB2里面都是按照空格补齐原则进行比较的。      
       ※:另外一个比较容易忽视的差异是:DB2是区分空【''】和NULL的。也就是空和NULL是连个不同的值。而ORACLE里面是不区分的。两个认为是一个值。      
      
下面是图表说明以及测试结果的结果:      
 DB2  Oracle  解决方法 
 Statement/Proc PrepareStatement Statement/Proc PrepareStatement Statement/Proc PrepareStatement
Char=Char 空格补齐  空格补齐 空格补齐 不用对应 不用对应
Char=常量/变量    实际值比较 变量补空格 双方cast处理  
常量/变量=常量/变量     变量补空格 双方cast处理  
Varchar=varchar/char/常量/变量   实际值比较  双方cast处理 双方cast处理  
函数(char/常量/变量)     双方cast处理 双方cast处理  
‘’=‘’   NULL处理 NULL处理 变量补空格 变量补空格  
NULL比较  IS NULL  IS NULL  IS NULL   
 区分NULL和''  只有NULL   把''当成NULL处理  只有NULL   把''当成NULL处理   
      这里说明几点:        
      1,空格补齐:是说按地段长的一方。把短的字段用空格补齐使两方长度一致        
     2,实际值比较:按照实际的值以及实际的长度进行比较        
     3,Cast处理:把比较双方,通过Cast转成Char类型。传入的长度要比实际值长。注意空指针问题。        
        
下面是测试的结果:        

        


测试总结:        
      1,db2检索,按照空格补齐原则进行检索的。  statement和prepareStatement都一样,找一方长度长的,把另一方后边空格补齐。        
      2, oracle 检索时,【prepareStatement】连接方式是按真实值进行比较或者说按实际长度进行比较, 而【Statement】连接方式是按照空格补齐原则进行比较的。        
      3,DB2区分空【''】和NULL的,而oracle只有NULL,他把【’’】当做NULL        
       4,db2中''=''按照空格补其原则,可以检索数据 ,oracle按照null检索不到数据        
       5,针对null,无论是db2还是oracle,null=‘’  null=null都不能检索到数据,必须用is null.        
       6,用函数(Rpad,Lpad,NVL)转化后进行比较时,db2采用空格补齐原则,oracle采用实际值原则进行检索。        
        
以上是在工作中总结出来的。如果有不妥的地方。希望大家不吝赐教。不甚荣幸  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值