以前有學生問過,varchar2(4k)與varchar2(1)裡面存同樣的資料會怎麼樣。
我喜歡直接用測試結果說話,現在把實驗補上
create table vc1(c1 varchar2(1));
create table vc4k(c1 varchar2(4000));
分別加入1w行資料進去
sql> insert into vc1 select * from vc4k;
1000000 rows inserted
sql> select s.bytes/1024/1024 from user_segments s where s.segment_name in(upper('vc4k'),upper('vc1'));
s.bytes/1024/1024
-----------------
1313
2 rows selected
sql> select count(*) from vc1 union all select count(*) from vc4k;
count(*)
----------
1000000
1000000
2 rows selected
sql> select c.table_name,c.column_name,c.data_type,c.data_length from user_tab_columns c where c.table_name in(upper('vc4k'),upper('vc1'));
table_name column_nam data_type data_length
---------- ---------- ---------- -----------
vc1 c1 varchar2 1
vc4k c1 varchar2 4000
2 rows selected
sql>
segment一樣
各自增加1w行再看。
sql> insert into vc1 select * from vc4k;
1000000 rows inserted
sql> insert into vc4k select * from vc4k;
1000000 rows inserted
sql> select s.bytes/1024/1024 from user_segments s where s.segment_name in(upper('vc4k'),upper('vc1'));
s.bytes/1024/1024
-----------------
2525
2 rows selected
sql>
仍然一樣
varchar2的長度的意義
既然varchar2是變長的,那麼設定它的長度還有什麼意義?乾脆都用最大長度 比如說乙個currency欄位,我可以把它設為varchar2 3 我也可以設為最大長度varchar2 4000 請問一下設為長度3有什麼好處?唯一可以想到的是,前一種方式限制了可以輸入的值的範圍,但是也留下了隱患 萬一...
varchar和varchar2的區別
varchar是標準sql裡面的。varchar2是oracle提供的獨有的資料型別。varchar對於漢字佔兩個位元組,對於英文是乙個位元組,佔的記憶體小,varchar2都是佔兩個位元組。varchar對空串不處理,varchar2將空串當做null來處理。varchar存放固定長度的字串,最大...
varchar和varchar2還有char的區別
varchar,varchar2 聯絡 1.varchar varchar2用於儲存可變長度的字串 比如varchar 20 存入字串 abc 則資料庫中該字段只佔3個位元組,而不是20個位元組 2.size 的最大值是 4000,而最小值是 1,其值表示位元組數,比如 varchar 20 表示最...