我們在數(shù)據(jù)庫設(shè)計(jì)時(shí),char、varchar、text和nchar、nvarchar、ntext是使用頻率相對來說比較高的數(shù)據(jù)類型,但有時(shí)候不知道選擇哪種為好,原因是不太清楚他們之間的區(qū)別所在。
要使數(shù)據(jù)庫設(shè)計(jì)得更加合理,我們需要對各種數(shù)據(jù)類型的概念和用法都有一個(gè)比較清晰的了解。
這里說說char、varchar、text和nchar、nvarchar、ntext的區(qū)別和選用。
1) char和varchar的長度都在1到8000之間,它們的區(qū)別在于char是定長字符數(shù)據(jù),而varchar是變長字符數(shù)據(jù)。所謂定長就是長度固定的,當(dāng)輸入的數(shù)據(jù)長度沒有達(dá)到指定的長度時(shí)將自動以英文空格在其后面填充,使長度達(dá)到相應(yīng)的長度;而變長字符數(shù)據(jù)則不會以空格填充。text存儲可變長度的非Unicode數(shù)據(jù),最大長度為2^31-1(2,147,483,647)個(gè)字符。
2) nchar、nvarchar、ntext,表示存儲的是Unicode數(shù)據(jù)類型的字符。我們知道字符中,英文字符只需要一個(gè)字節(jié)存儲就足夠了,但漢字眾多,需要兩個(gè)字節(jié)存儲,英文與漢字同時(shí)存在時(shí)容易造成混亂,Unicode字符集就是為了解決字符集這種不兼容的問題而產(chǎn)生的,它所有的字符都用兩個(gè)字節(jié)表示,即英文字符也是用兩個(gè)字節(jié)表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個(gè)字符,不論是英文還是漢字;而char、varchar最多能存儲8000個(gè)英文,4000個(gè)漢字??梢钥闯鍪褂胣char、nvarchar數(shù)據(jù)類型時(shí)不用擔(dān)心輸入的字符是英文還是漢字,較為方便,但在存儲英文時(shí)數(shù)量上有些損失。
所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數(shù)字,用char/varchar 。