標籤:
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的Null 字元串
varchar/varchar2適用於長度不固定的,一般不含中文的情況
3.nvarchar/nvarchar2
nvarchar和nvarchar2是長度不固定的
nvarchar不區分中英文,比如說:你定義了nvarchar(20),你可以存入20個英文字母/漢字或中英文組合,這個20定義的是字元數而不是位元組數
nvarchar2基本上等同於nvarchar,不同在於nvarchar2中存的英文字母也佔兩個位元組
nvarchar/nvarchar2適用於存放中文
4.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 處理。
5.資料檢索
無論是否通過索引,varchar類型的資料檢索略優於char的掃描。
選擇char還是選擇varchar的建議
1.適宜於char的情況:
a. 列中的各行資料長度基本一致,長度變化不超過50位元組;
b. 資料變更頻繁,資料檢索的需求較少。
c. 列的長度不會變化,修改char類型列的寬度的代價比較大。
d. 列中不會出現大量的NULL值。
e. 列上不需要建立過多的索引,過多的索引對char列的資料變更影響較大。
2.適宜於varchar的情況;
a. 列中的各行資料的長度差異比較大。
b. 列中資料的更新非常少,但查詢非常頻繁。
c. 列中經常沒有資料,為NULL值或為空白值
nchar [ ( n ) ]
n 個字元的固定長度的 Unicode 字元資料。n 值必須在 1 到 4,000 之間(含)。儲存大小為兩倍 n 位元組。
nvarchar [ ( n | max ) ]
可變長度 Unicode 字元資料。n 值在 1 到 4,000 之間(含)。max 指示最大儲存大小為 2^31-1 位元組。儲存大小是所輸入字元個數的兩倍 + 2 個位元組。所輸入資料的長度可以為 0 個字元。
注釋:
如果沒有在資料定義或變數聲明語句中指定 n,則預設長度為 1。如果沒有使用 CAST 函數指定 n,則預設長度為 30。
如果列資料項目的大小可能相同,請使用 nchar。
如果列資料項目的大小可能差異很大,請使用 nvarchar。
sysname 是系統提供的使用者定義資料類型,除了不可為空白值外,在功能上與 nvarchar(128) 相同。sysname 用於引用資料庫物件名。
為使用 nchar 或 nvarchar 的對象分配的是預設的資料庫定序,但可使用 COLLATE 子句分配特定的定序。
SET ANSI_PADDING ON 永遠適用於 nchar 和 nvarchar。SET ANSI_PADDING OFF 不適用於 nchar 或 nvarchar 資料類型。
oracle中varchar、varchar2、char和nvarchar的區別