服務(wù)熱線
153 8323 9821
1、各自的定義:
? nvarchar(n) : 包含 n 個字符的可變長度 Unicode 字符數(shù)據(jù)。n 的值必須介于 1 與 4,000 之間。字節(jié)的存儲大小是所輸入字符個數(shù)的兩倍。所輸入的數(shù)據(jù)字符長度可以為零。
? varchar[(n)]: 長度為 n 個字節(jié)的可變長度且非 Unicode 的字符數(shù)據(jù)。n 必須是一個介于 1 和 8,000 之間的數(shù)值。存儲大小為輸入數(shù)據(jù)的字節(jié)的實際長度,而不是 n 個字節(jié)。所輸入的數(shù)據(jù)字符長度可以為零。
varchar(max)最大2gb字符 使用C#中的DbType.varchar 針對max DbType.varchar,-1
2、區(qū)別:
? 從存儲方式上,nvarchar是按字符存儲的,而 varchar是按字節(jié)存儲的;
? 從存儲量上考慮, varchar比較節(jié)省空間,因為存儲大小為字節(jié)的實際長度,而 nvarchar是雙字節(jié)存儲;
? 在使用上,如果存儲內(nèi)容都是英文字符而沒有漢字等其他語言符號,建議使用varchar;含有漢字的使用nvarchar,因為nvarchar是使用Unicode編碼,即統(tǒng)一的字符編碼標(biāo)準(zhǔn),會減少亂碼的出現(xiàn)幾率;
?如果你做的項目可能涉及不同語言之間的轉(zhuǎn)換,建議用nvarchar。
這點要注意:varchar 適合與存儲英文和數(shù)字; nvarchr一般用于存儲中文或其他語言的輸入,因為 這樣,可以防止到其他語言平臺上出現(xiàn)亂碼的問題。
舉個例子:
create table a (name1 varchar(8))
insert a Select '張紅a'
--- 存儲長度為5個字節(jié)
insert a Select '王一南'
----存儲長度為6個字節(jié)
---意思是varchar變長字符數(shù)據(jù)類型與存儲數(shù)據(jù)的實際長度是一致的
nvarchar(n):可變長度 Unicode 數(shù)據(jù),其最大長度為 4,000 字符。
字節(jié)的存儲大小是所輸入字符個數(shù)的兩倍,
就是說它是雙字節(jié)來存儲數(shù)據(jù)的。
如果存儲數(shù)據(jù)如果存在單字節(jié)時,它也是以雙字節(jié)來占用存儲空間的。
舉個例子:
create table aa (name1 nvarchar(8))
insert aa Select '張紅a'
--- 存儲長度為6個字節(jié)