char nchar varchar nvarchar的區別
N:表示unicode格式編碼,
Var:表示可變長度.
兩者結合形成這4種類型
詳細說明:
1.Unicode 字元資料
nchar[ ( n ) ]: n 個字元的固定長度的 Unicode 字元資料。
nvarchar[ ( n | max ) ] :可變長度 Unicode 字元資料。
說明:
N:1-4000(含) 這裡n是字元長度,因為是Unicode,所以位元組數是字元的2倍,所以為1-8000個位元組.
即使用不到兩個位元組都佔用兩個位元組
其他:
sysname 是系統提供的使用者定義資料型別,除了不以為零外,在功能上與 nvarchar(128) 相同。sysname 用於引用資料庫物件名
2.非 Unicode (ASCII)字元資料
char[ ( n ) ] 固定長度,非 Unicode 字元資料,
varchar[ ( n | max ) ] 可變長度,非 Unicode 字元資料。
說明:
N:1-4000(含) 這裡n是字元長度,因為是非Unicode,也是位元組長度;所以位元組就是字元,所以為1-8000個位元組.也是1-8000個字元.
max 指示最大儲存大小是 2^31-1 個位元組。儲存大小是輸入資料的實際長度加 2 個位元組, 可變長度的偏移陣列 VarOffset 2*VarCount(每一列都要另外加上2個自己的偏移量)。所輸入資料的長度可以為 0 個字元。
將為使用 char 或 varchar 的物件指派資料庫的預設排序規則,除非使用 COLLATE 子句指派了特定的排序規則。該排序規則控制用於儲存字元資料的內碼表。
如果沒有在資料定義或變數宣告語句中指定 n,則預設長度為 1。如果沒有使用 CAST 函式指定 n,則預設長度為 30
使用場合:
(1)如果列資料項的大小可能相同,請使用 nchar/char。
(2)如果列資料項的大小可能差異很大,請使用 nvarchar/varchar。
(3)如果站點支援多語言,請考慮使用 nchar 或 nvarchar,以最大限度地消除字元轉換問題。否則使用 char 或varchar。
(4)如果列資料項大小相差很大,而且大小可能超過 8,000 位元組,請使用 varchar(max)。
nvarchar、nchar、char、varchar實際佔用儲存空間總結
nvarchar [ ( n | max ) ]:unicode,所以每個字元佔用兩個位元組,加上2個位元組的行偏移 最大4000
nchar [ ( n ) ]: unicode,所以每個字元佔用兩個位元組 最大4000
char [ ( n ) ]: 是多少就是多少 最大8000
varchar [ ( n | max ) ]: 加上2個位元組的行偏移最大8000