既然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個,如果是...