首页 > 数据库 > Oracle > Oracle字符值的比较和储存
Oracle字符值的比较和储存
以前对Oracle字符值的比较和储存没有弄得很清楚,直到最近写程序遇到了,才认真去实践验证了一下,结果还真的发现自己的一些错误认识。
SQL> create table testyyw(col1 char(2),col2 varchar2(2));
Table created
SQL> insert into testyyw values ('x','x');
1 row inserted
SQL> insert into testyyw values ('x ','x ');
1 row inserted
SQL> select dump(col1),dump(col2) from testyyw;
DUMP(COL1) DUMP(COL2)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Typ=96 Len=2: 120,32 Typ=1 Len=1: 120
Typ=96 Len=2: 120,32 Typ=1 Len=2: 120,32
用dump函数看出来了,2行在数据库中的储存方式不一样的,varchar2列后面也有空格
在网上查了下Oracle字符的比较,查到了如下结果
关于字符值的比较, Oracle使用以下两种比较规则:
1、空格补齐比较语法
对于类型CHAR、NCHAR、text literals、USER函数值, 在进行比较时, 先在较短的那个
字符串后补上空格以使长度相等, 然后再进行比较.
所以, 'ab'='ab '
2、非补齐比较语法
对于类型VARCHAR2、NVARCHAR2, 则不用补齐, 直接进行比较
而对于1和2的类型作比较的情况,我的试验结果都是原值直接比较,也就是按2类的方法来,
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7584220/viewspace-911349/ ,如需转载,请注明出处,否则将追究法律责任。