SQLServer中char、varchar、nchar、nvarchar的區別:
(1) 定義:
char: 固定長度,儲存ANSI字元,不足的補英文半形空格。
nchar: 固定長度,儲存Unicode字元,不足的補英文半形空格
varchar: 可變長度,儲存ANSI字元,根據資料長度自動變化。
nvarchar: 可變長度,儲存Unicode字元,根據資料長度自動變化。
nvarchar(n) :包含 n個字元的可變長度 Unicode 字元資料。n 的值必須介於 1 與 4,000 之間。位元組的儲存大小是所輸入字元個數的兩倍。所輸入的資料字元長度可以為零。
varchar[(n)]:長度為 n 個位元組的可變長度且非 Unicode的字元資料。n 必須是一個介於 1 和 8,000之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。所輸入的資料字元長度可以為零。
注意: ANSI主要是以單位元組來儲存資料,一般適合英文。而我們常用的漢字需要用兩個位元組來儲存,所以就要使用unicode的資料型別,不然讀取出來的資料可能會亂碼。
(2)區別:
①從儲存方式上,nvarchar是按字元儲存的,而 varchar是按位元組儲存的;
②從儲存量上考慮, varchar比較節省空間,因為儲存大小為位元組的實際長度,而 nvarchar是雙位元組儲存;
③在使用上,如果儲存內容都是英文字元而沒有漢字等其他語言符號,建議使用varchar;含有漢字的使用nvarchar,因為nvarchar是使用Unicode編碼,即統一的字元編碼標準,會減少亂碼的出現機率;
④ 如果你做的專案可能涉及不同語言之間的轉換,建議用nvarchar。
(3)優缺點:
Nvarchar優點:判斷字串的時候可以不需要考慮中英文兩種字元的差別,可以避免程式中亂碼的問題。
缺點:儲存英文字元會增大一倍的儲存空間.但是在儲存代價已經很低廉的情況下,優先考慮相容性會給你帶來更多好處的,效率沒有varchar高。
(4)為什麼要用nvarchar?
有n字首的,n表示Unicode字元,即所有字元都佔兩個位元組,nchar,nvarchar
字元中,英文字元只需要一個位元組儲存就足夠了,但漢字眾多,需要兩個位元組儲存,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不相容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。
(5)有關var的簡單介紹:
有var字首的,表示是實際儲存空間是變長的,varchar,nvarchar
所謂定長就是長度固定的,當輸入的資料長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;而變長字元資料則不會以空格填充,比較例外的是,text儲存的也是可變長。
(6)如何使用這些型別?
如果你肯定儲存的資料長度,而且不包中文的,可以選擇char型別。
如果肯定儲存的資料長度,但可能包括中文,可以選擇nchar型別。
如果不確定儲存的資料長度,儲存只有英文、數字的最好用varchar
如果不確定儲存的資料長度,也有可能有中文,可以選擇nvarchar型別,在SQL Server2005中也是比較常用的字元資料型別。