varchar2設定長度與實際大小

2021-06-29 03:13:00 字數 1491 閱讀 7138

以前有學生問過,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 表示最...