你或許不知道的varchar2型別的定義

ljm0211發表於2012-07-24

通常,我們定義一個varchar2欄位時,使用的是如下定義:

Cola Varchar2(10);

 

他表示cola可以儲存最多10個英文字元,或者5zhs16gbk中文字元,或者3utf8的中文字元。

 

上面的區別對使用英文的國家其實不是問題,但是很不幸,我們使用的是中文~

我們平常遇到的最大問題就是做跨字符集導數時,源端使用16gbk,而目標端使用utf8,而且原表欄位長度又剛好滿足最長的長度需求。這樣導數時就會有欄位超長的問題,不斷的報錯。

平常的處理方法都是先導表結構,修改所有的字元型別欄位(char varchar2)為原長度的4/3以上。

 

其實 varchar2 還有另一種定義方法:

Colb varchar2(10 char);

 

他表示的意義是colb可以儲存最多10個任意字元。看下面測試:

SQL> create table a (a varchar2(2 char));

 

Table created

 

Executed in 0.016 seconds

 

SQL> insert into a values ('哈哈');

 

1 row inserted

 

Executed in 0 seconds

 

SQL> insert into a values ('haha');

 

insert into a values ('haha')

 

ORA-12899: value too large for column "AUTODATA"."A"."A" (actual: 4, maximum: 2)

 

SQL> commit;

 

Commit complete

 

Executed in 0 seconds

 

SQL> create table b(b varchar2(2));

 

Table created

 

Executed in 0.015 seconds

 

SQL> insert into b values ('哈哈');

 

insert into b values ('哈哈')

 

ORA-12899: value too large for column "AUTODATA"."B"."B" (actual: 4, maximum: 2)

 

如果我們在開發階段就要求開發人員以第二種方式定義varchar2,跨字符集的資料遷移就不需要那麼糾結了~~ 而且還不會受限於varchar2最多隻能儲存2000個漢字~~

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-736526/,如需轉載,請註明出處,否則將追究法律責任。

相關文章