频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Oracle字符值的比较和储存

来源:IT168 作者: 出处:巧巧读书 2007-04-21 进入讨论组
     以前对Oracle字符值的比较和储存没有弄得很清楚,直到最近写程序遇到了,才认真去实践验证了一下,结果还真的发现自己的一些错误认识。

对于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类的方法来收藏 http://www.qqread.com/oracle/2007/04/b309821.html 更多文章 更多内容请看新一代储存技术SASOracle 10g基础应用专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章