Oracle数据,Hibernate通过身份证号查询指定用户身份证信息找不到
问题
今天遇到一个问题,使用Oracle数据库,有一张数据表,该表存的是身份证信息,分别有名字,身份证号,有效开始时间和有效截止时间,表中有一条记录A,身份证号为"xxx",dao层有一个通过身份证号进行精确查询的方法。将sql语句拷贝到数据库中,通过数据库查找这个记录是存在的,但是代码里就是查找不出来。通过然后代码里通过like ‘%xxx%’查询,可以查询出来;然后,从数据库查询出该数据,拷贝出来,发现这个证件号码后面带了一串空格。然后回去看表的设计,发现对身份证号码使用的数据类型是char,尴尬。
Oracle的char和varchar比较:
char: char类型保存定长字符串,最小长度为1字节(或字符数),最长2000字节(特别注意:这里是字节,而不是字符数)
例如:char(32)代表字符类型最长32位,如果不够32位使用空格补齐。
varchar2
varchar2指变长字符串类型。使用varchar2类型时必须指定其长度(最小1字节或字符数,最大4000字节)。
例如:varchar2(32)代表变长字符类型最长32位,如果不够32位则取实际的字节数。
总结
因为建表是忘了考虑到char和varchar2的区别,定义错了,修改为varchar2后,问题就解决了。特别说明:对于char的使用,一定要确定是否是定长数据,如果是才用char类型。