四個類型都屬於變長字符類型, varchar和varchar2的區別在與後者把所有字符都占兩字節,前者只對漢字和全角等字符占兩字節。 nvarchar和nvarchar2的區別和上面一樣, 與上面區別在於是根據Unicode 標準所進行的定義的類型,通常用於支持多國語言類似系統的定義。
1.char
char的長度是固定的,比如說,你定義了char(20),即使你你插入abc,不足二十個字節,數據庫也會在abc後面自動加上17個空格,以補足二十個字節;
char是區分中英文的,中文在char中占兩個字節,而英文占一個,所以char(20)你只能存20個字母或10個漢字。
char適用於長度比較固定的,一般不含中文的情況
2.varchar/varchar2
varchar是長度不固定的,比如說,你定義了varchar(20),當你插入abc,則在數據庫中只占3個字節。
varchar同樣區分中英文,這點同char。
varchar2基本上等同於varchar,它是Oracle自己定義的一個非工業標準varchar,不同在於,varchar2用null代替varchar的空字符串
varchar/varchar2適用於長度不固定的,一般不含中文的情況
3.nvarchar/nvarchar2
nvarchar和nvarchar2是長度不固定的
nvarchar不區分中英文,比如說:你定義了nvarchar(20),你可以存入20個英文字母/漢字或中英文組合,這個20定義的是字符數而不是字節數
nvarchar2基本上等同於nvarchar,不同在於nvarchar2中存的英文字母也占兩個字節
nvarchar/nvarchar2適用於存放中文
char [ ( n ) ]
固定長度,非 Unicode 字符數據,長度為 n 個字節。n 的取值範圍為 1 至 8,000,存儲大小是 n 個字節。
varchar [ ( n | max ) ]
可變長度,非 Unicode 字符數據。n 的取值範圍為 1 至 8,000。max 指示最大存儲大小是 2^31-1 個字節。存儲大小是輸入數據的實際長度加 2 個字節,用於反映存儲的數據的長度。所輸入數據的長度可以為 0 個字符。
* 如果列數據項的大小一致,則使用 char。
* 如果列數據項的大小差異相當大,則使用 varchar。
* 如果列數據項大小相差很大,而且大小可能超過 8,000 字節,請使用 varchar(max)。
如果未在數據定義或變量聲明語句中char 或 varchar 數據類型指定 n,則默認長度為 1。如果在使用 CAST 和 CONVERT 函數時char 或 varchar 數據類型未指定 n,則默認長度為 30。
當執行 CREATE TABLE 或 ALTER TABLE 時,如果 SET ANSI_PADDING 為 OFF,則定義為 NULL 的 char 列將作為 varchar 處理。
1.NULL值(空值)。
a. char列的NULL值占用存儲空間。
b. varcahr列的NULL值不占用存儲空間。
c. 插入同樣數量的NULL值,varchar列的插入效率明顯高出char列。
2.插入數據
無論插入數據涉及的列是否建立索引,char的效率都明顯低於varchar。
3. 更新數據
如果更新的列上未建立索引,則char的效率低於varchar,差異不大;建立索引的話,效率較高。
4. 修改結構
a. 無論增加或是刪除的列的類型是char還是varchar,操作都能較快的完成,而且效率上沒有什麽差異。
b. 對於增加列的寬度而言,char與varchar有非常明顯的效率差異,修改varcahr列基本上不花費時間,而修改char列需要花費很長的時間。
Tags:
英文字母 oracle Oracle 字符串 數據庫
文章來源: