Oracle字符值的比较和储存介绍


以前对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类的方法来



相关阅读:
Joomla中文教程:创建并使用插件对文章内容进行修改
JavaScript窗口和框架
Discuz!NT控件剖析 之 左侧导航控件
linux下mysql自动备份脚本代码
JQuery 学习笔记 选择器之二
用javascript实现的激活输入框后隐藏初始内容
利用Ajax技术写一个迷你留言板WEB控件
css里expression实现界面对象的批量控制
Linux操作系统下安装显卡驱动的方法步骤
基于逻辑运算的简单权限系统(实现) JS 版
ASP.NET User Control使用技巧一则
JSP开发入门(二)----JSP语法的基本原理
php的memcached客户端memcached
登陆oracle数据库的方式
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4