参考:http://www.cnblogs.com/vipcjob/archive/2010/06/08/1754075.htmlhtml
http://www.itpub.net/thread-732714-2-1.html数据库
既然varchar2是变长的,那么设置它的长度还有什么意义?干脆都用最大长度
好比说一个Currency字段,我能够把它设为varchar2(3),我也能够设为最大长度varchar2(4000),请问一下设为长度3有什么好处?
惟一能够想到的是,前一种方式限制了能够输入的值的范围,可是也留下了隐患:万一之后长度变大了怎么办?fetch
主要如下3个好处.net
1。因为数据库的限制(参见Logical Database Limits),每一个索引的字段的总长度不能超过75% * the database block size再减去some overhead的长度,因为有限制,因此字段的长度也限制了索引字段的大小:htm
SQL> create table x(
a varchar2(2000),
b varchar2(2000),
c varchar2(2000),
d varchar2(2000),
e varchar2(2000));blog
SQL> create table y(
a varchar2(10),
b varchar2(10),
c varchar2(10),
d varchar2(10),
e varchar2(10));索引
SQL> create index y_idx on y(a,b,c,d);
索引已建立。ip
SQL> create index x_idx on x(a,b,c,d);
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (6398)内存
二、 字段长度可以起到必定的限制做用,好比一个字段长度要求是10个字节,必需要设置为varchar2(10)。it
三、 若是用到ARRAY FETCH,那么客户端fetch 数据须要的内存是根据定义的字段的长度,因此大的字段会须要大的内存。好比10个VARCHAR2(4000)字段,我要取100行,那么就须要4000*10*100的内存,大约是4M,可是若是定义为VARCHAR2(10),那么就须要10*10*100的内存。