對于程序中的string型字段,SQLServer中有char, varchar, nchar, nvarchar四種類型來對應(yīng):
1,定長和變長
定長就是長度固定的,當(dāng)輸入的數(shù)據(jù)長度沒有達(dá)到指定的長度時候,將自動以英文空格在其后填充, 使得長度達(dá)到相應(yīng)的長度
有var前綴的,表示實際存儲空間是變長的,varchar, nvarchar變長字符數(shù)據(jù)不會使用英文空格填充,text實際存儲的也是變長
2,unicode, 和非 unicode
數(shù)據(jù)庫中,英文字符只需要一個字節(jié)存儲,漢字和其他非英文字符,需要兩個字節(jié)存儲,
如果英文和漢字同時存在,由于占用空間不同,容易造成混亂,導(dǎo)致讀取出來的字符串是亂碼
unicode字符集是為了解決字符集不兼容的問題產(chǎn)生的,所有的字符都使用兩個字節(jié)表示,前綴n表示unicode
3,基于以上兩點查看字段容量
char, varchar 最多8000個英文, 4000個漢字
nchar, nvarchar可以存儲4000個字符,無論是英文還是漢字
4,使用
如果數(shù)據(jù)量非常大,能百分百確定長度且保存只是ANSI字符,使用char
能確定長度不一定是ANSI字符,使用nchar
對于超大數(shù)據(jù),如文章內(nèi)容,使用nText
對于其他的通用nvarchar
char, varchar, nchar, nvarchar 特點比較:
char, 存儲定長數(shù)據(jù)很方便,字段上的索引效率極高,
varchar,存儲變長數(shù)據(jù), 存儲效率沒有char 高, varchar類型的實際長度是它的值的實際長度+1, 使用一個字節(jié)存儲長度
從空間上考慮各墨,用**varchar**合適蔗坯;從效率上考慮誉察,用**char**合適,關(guān)鍵是根據(jù)實際情況找到權(quán)衡點。
text,存儲的是可變長度的非unicode數(shù)據(jù),最大長度為2**31 - 1個字符