Oracle中varchar,varchar2,nvarchar,nvarchar2的區別及其它數據類型描述

--varchar,varchar2

聯繫:

1.varchar/varchar2用於存儲可變長度的字符串

比如varchar(20),存入字符串'abc',則數據庫中該字段只佔3個字節,而不是20個字節

2.size 的最大值是 4000,而最小值是 1,其值表示字節數,比如

varchar(20)表示最大可以存放20個字節的內容

區別:

1.varchar2把所有字符都佔兩字節處理(一般情況下),varchar只對漢字和全角等字符佔兩字節,數字,英文字符等都是一個字節;

2.VARCHAR2把空串等同於null處理,而varchar仍按照空串處理;

3.VARCHAR2字符要用幾個字節存儲,要看數據庫使用的字符集,

比如GBK,漢字就會佔兩個字節,英文1個

如果是UTF-8,漢字一般佔3個字節,英文還是1個。 

但是一般情況下,我們都認爲是兩個字節處理,因爲oracle安裝時候默認我們都選擇GBK的編碼格式,但是我們在頁面做輸入字符串長度的校驗的時候,還是以數據庫設計字段最大長度除3來作爲最大長度-----防止數據庫移植時設置不同編碼格式;

比如:VARCHAR2(10),一般情況下最多存放5個漢字,10個字符

--nvarchar,nvarchar2 

聯繫:

1.nvarchar/nvarchar2用於存儲可變長度的字符串

2.size 的最大值是 4000,而最小值是 1,其值表示字符的個數,而不是字節數

3.這兩種類型更適合存儲中文

區別:

1.nvarchar中字符爲中文則一般按2個字節計算,英文數字等按照一個自己計算

2.nvarchar2中所有字符均按照2個字節計算;

3.nvarchar2雖然更佔空間,但是它有更好的兼容性,所有推薦使用;

【注意】

VARCHAR2是Oracle提供的特定數據類型,Oracle可以保證VARCHAR2在任何版本中該數據類型都可以向上和向下兼容。

VARCHAR在Oracle中不建議使用。

具體到NVARCHAR2和VARCHAR2的區別,從使用角度來看區別在於:NVARCHAR2在計算長度時和字符集相關的,例如數據庫是中文字符集時以長度10爲例,則

1、NVARCHAR2(10)是可以存進去10個漢字的,如果用來存英文也只能存10個字符。

2、而VARCHAR2(10)的話,則只能存進5個漢字,英文則可以存10個。  

VARCHAR2(size)

可變長度的字符串,其最大長度爲size個字節;size的最大值是4000,而最小值是1;你必須指定一個VARCHAR2的size;

NVARCHAR2(size)

可變長度的字符串,依據所選的國家字符集,其最大長度爲size個字符或字節;size的最大值取決於儲存每個字符所需的字節數,其上限爲4000;你必須指定一個NVARCHAR2的size;

NUMBER(p,s)

精度爲p並且數值範圍爲s的數值;精度p的範圍從1到38;數值範圍s的範圍是從-84到127;

例如:NUMBER(5,2) 表示整數部分最大3位,小數部分爲2位;

NUMBER(5,-2) 表示數的整數部分最大爲7其中對整數的倒數2位爲0,前面的取整。

NUMBER 表示使用默認值,即等同於NUMBER(5);

LONG

可變長度的字符數據,其長度可達2G個字節;

DATE

有效日期範圍從公元前4712年1月1日到公元后4712年12月31日

RAW(size)

長度爲size字節的原始二進制數據,size的最大值爲2000字節;你必須爲RAW指定一個size;

LONG RAW

可變長度的原始二進制數據,其最長可達2G字節;

CHAR(size)

固定長度的字符數據,其長度爲size個字節;size的最大值是2000字節,而最小值和默認值是1;

NCHAR(size)

也是固定長度。根據Unicode標準定義

CLOB

一個字符大型對象,可容納單字節的字符;不支持寬度不等的字符集;最大爲4G字節

NCLOB

一個字符大型對象,可容納單字節的字符;不支持寬度不等的字符集;最大爲4G字節;儲存國家字符集

BLOB

一個二進制大型對象;最大4G字節

BFILE

包含一個大型二進制文件的定位器,其儲存在數據庫的外面;使得可以以字符流I/O訪問存在數據庫服務器上的外部LOB;最大大小爲4G字節.

blob、clob、nclob 三種大型對象(LOB),用來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件,最大長度是4GB。 LOB有幾種類型,取決於你使用的字節的類型,Oracle 8i實實在在地將這些數據存儲在數據庫內部保存。 可以執行讀取、存儲、寫入等特殊操作 CLOB(Character Large Object) 用於存儲對應於數據庫定義的字符集的字符數據。(類似於long類型) BLOB(Binary Large Object) 可用來存儲無結構的二進制數據。(類似於row和long row)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章