既然varchar2是变长的,那么设置它的长度还有什么意义?干脆都用最大长度
比如说一个Currency字段,我可以把它设为varchar2(3),我也可以设为最大长度varchar2(4000),请问一下设为长度3有什么好处?
唯一可以想到的是,前一种方式限制了可以输入的值的范围,但是也留下了隐患:万一以后长度变大了怎么办?
主要以下3个好处
1。由于数据库的限制(参见Logical Database Limits),每个索引的字段的总长度不能超过75% * the database block size再减去some overhead的长度,由于有限制,所以字段的长度也限制了索引字段的大小:
SQL> create table x(
a varchar2(2000),
b varchar2(2000),
c varchar2(2000),
d varchar2(2000),
e varchar2(2000));
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);
索引已创建。
SQL> create index x_idx on x(a,b,c,d);
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (6398)
2、 字段长度能够起到一定的限制作用,比如一个字段长度要求是10个字节,必须要设置为varchar2(10)。
3、 如果用到ARRAY FETCH,那么客户端fetch 数据需要的内存是根据定义的字段的长度,所以大的字段会需要大的内存。比如10个VARCHAR2(4000)字段,我要取100行,那么就需要4000*10*100的内存,大约是4M,但是如果定义为VARCHAR2(10),那么就需要10*10*100的内存。