varchar2的長度的意義

2022-03-19 19:34:44 字數 1121 閱讀 6583

既然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的記憶體。

varchar和varchar2的區別

varchar是標準sql裡面的。varchar2是oracle提供的獨有的資料型別。varchar對於漢字佔兩個位元組,對於英文是乙個位元組,佔的記憶體小,varchar2都是佔兩個位元組。varchar對空串不處理,varchar2將空串當做null來處理。varchar存放固定長度的字串,最大...

varchar和varchar2的區別

varchar是標準sql裡面的。varchar2是oracle提供的獨有的資料型別。varchar對於漢字佔兩個位元組,對於數字,英文本元是乙個位元組,佔的記憶體小,varchar2一般情況下把所有字元都佔兩位元組處理。具體要看資料庫使用的字符集,比如gbk,漢字就會佔兩個位元組,英文1個,如果是...

varchar和varchar2的區別

varchar是標準sql裡面的 varchar2是oracle提供的獨有的資料型別。varchar對於漢字佔兩個位元組,對於數字,英文本元是乙個位元組,佔的記憶體小 varchar2一般情況下把所有字元都佔兩位元組處理。具體要看資料庫使用的字符集,比如gbk,漢字就會佔兩個位元組,英文1個,如果是...