`

Oracle中CHAR (n)和VARCHAR2(n)的区别

阅读更多
     今天在做删除歌曲的时候,出现org.hibernate.ObjectNotFoundException: No row with the given identifier exists:[cn..entity.Song#1]的问题,不过查看表后,id的值是存在的。

     经过一番查找,发现表中id字段的类型是CHAR(22),以前记得跟VARCHAR2有所区别,即CHAR 的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
 
    其中后台产生的SQL如下:
    select song0_.ID as ID7_0_,song0_.TITLE as TITLE7_0_ from SONG song0_ where song0_.ID='1';
    由上面可知,虽然你看到表中有id值为1,实际上它的值因为1+19个空格的长度,所以查找不到,如:











select * from song t where t.id = '1' 可以查到数据
select * from song t where t.id = '1 '可以查到数据

select * from song t where t.title = 'lady gaga'可以查到数据
select * from song t where t.title = 'lady gaga '不可以查到数据

有空,欢迎到红番薯逛逛
  • 大小: 10.2 KB
  • 大小: 10.6 KB
  • 大小: 3.1 KB
  • 大小: 9.3 KB
  • 大小: 4.7 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics