在oracle 11g下測試了下varchar2與nvarchar2這兩種類型,網上有很多關於這兩種類型的區別的帖子,我還是自己測試了下。
varchar2(size type),size最大為4000,type可為char或者byte,默認是byte。
varchar2最多存放4000字節的數據,不管type是char還是byte。所以如果你設置varchar2(4000 char),你可以存入4000個字母,但是不能存入4000個漢字。如果數據庫字符集編碼是GBK,那么varchar2最多能存放2000個漢字,如果字符集編碼是UTF-8,那么則只能最多存放1333個漢字了。
nvarchar2(size),size最大值為2000,單位是字符,而且不管是漢字還是字母,每個字符的長度都是2個字節。所以nvarchar2類型的數據最多能存放2000個漢字,也最多只能存放2000個字母。並且nvarchar2不同於varchar2,他不受數據庫字符集的影響。
另外如果我們把A1,A2都設為varchar2(4000),並且這兩個字段的內容長度都超過了2000字節,那么使用select A1||A2 from table這樣的語句時,因為結果超過了4000字節,所以會報錯。
從使用角度來看區別在於:NVARCHAR2在計算長度時和字符集相關的,例如數據庫是中文字符集時以長度10為例,則
1、NVARCHAR2(10)是可以存進去10個漢字的,如果用來存英文也只能存10個字符。
2、而VARCHAR2(10)的話,則只能存進5個漢字,英文則可以存10個;
VARCHAR2可變長度字符域,最大長度可達4000個字符
NVARCHAR2多字節字符集的可變長度字符域,長度隨字符集而定,最多為2000個字符或2000個字節;
