oracle比对值,Oracle字符值的比较和储存

Oracle字符值的比较和储存

以前对Oracle字符值的比较和储存没有弄得很清楚,直到最近写程序遇到了,才认真去实践验证了一下,结果还真的发现自己的一些错误认识。[@more@]对于char和varchar2类型数据库列值的储存,以前一直以为:

1、char列按输入的值储存,如果值长度不够char列的长度,则在后面补上空格char(32)

2、varchar2列按输入的值储存,如果值长度不够varchar2列的长度,后面不补空格

上面2点都是对的,不过下面这一点就不对了

3、即使输入的值后面含空格,varchar2列在储存时也会去掉,也就是说varchar2列后一定不含空格

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类的方法来,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值