Oracle char 与 varchar2的区别

char和Varchar2在Oracle的内部存储格式都一样都是数据长度length+实际数据data,其中数据长度length用1-3个字节表示,length255用3个字节表示。 Thomas Kyte的建议是忘记有char类型的存在,在一切需要字符的地方都是用varchar2格式。 “不过,如果混合使用并匹配 VARCHAR2 和 CHAR ,你就会不断地遭遇这个问题。不仅如此,开发人员 现 在还必须在应用中考虑字段宽度。如果开发人员喜欢使用 RPAD() 技巧将绑定变量转换为某种能与
摘要由CSDN通过智能技术生成

char和Varchar2在Oracle的内部存储格式都一样都是数据长度length+实际数据data,其中数据长度length用1-3个字节表示,length<255字节的使用1个字节,length>255用3个字节表示。

Thomas Kyte的建议是忘记有char类型的存在,在一切需要字符的地方都是用varchar2格式。

不过,如果混合使用并匹配 VARCHAR2 和 CHAR ,你就会不断地遭遇这个问题。不仅如此,开发人员 现
在还必须在应用中考虑字段宽度。如果开发人员喜欢使用 RPAD() 技巧将绑定变量转换为某种能与 CHAR 字
段比较的类型(当然,与截断( TRIM )数据库列相比,填充绑定变量的做法更好一些,因为对列应用函数
TRIM 很容易导致无法使用该列上现有的索引),可能必须考虑到经过一段时间后列长度的变化。如果字段
的大小有变化,应用就会受到影响,因为它必须修改字段宽度。
正是由于以下这些原因:定宽的存储空间可能导致表和相关索引比平常大出许多,还伴随着绑定变 量
问题,所以无论什么场合我都会避免使用 CHAR 类型。即便是对单字符的字段,我也想不出有什么必要使 用
CHAR 类型,因为在这种情况下,这两种类型确实没有显著差异。 VARCHAR2(1) 和 CHAR(1) 从任何方面来讲 都
完全相同。此时,使用 CHAR 类型并没有什么有说服力的理由,为了避免混淆,所以我 “ 一律排斥 “ ,即 使
是 CHAR(1) 字段(即单字符字段)也不建议使用 CHAR 类型。

下面链接是AskTom中关于char和Varchar2的区别的讨论:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:123212348063

 

经常有人说,char的性能比varchar的性能好,做下试验测试:

create table test (key number , char_str char(50),varchar_str varchar2(50));

insert into test select rownum,object_id,object_id from dba_objects;

insert into test select rownum+50530 ,object_id+50530,object_id+50530 from dba_objects;

insert into test select ro

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值