1. 程式人生 > >SQL中char、nchar、varchar、nvarchar、text、ntext的區別

SQL中char、nchar、varchar、nvarchar、text、ntext的區別

工作了三年多,第一次跑來寫部落格,以前工作中遇到的問題,都沒有整理過,從今天起,無論是在學習中還是在工作中,都希望能夠通過部落格記錄一下自己的筆記以及體會。

作為開發人員,要做資料庫設計,是避免不了的,但在定義表結構的時候,在選擇資料型別時,會發現有幾個型別很相似,就是char、nchar、varchar、nvarchar、text、ntext型別。開始的時候我也沒有多在意,也沒有去查過或者測試過他們的區別,現在我就給他們做個簡單的分析,如果有不對的地方,希望大家多多指教。

char:是定長的,當你輸入的字元小於定義的長度的時候,他會在後面補空格。如char(10)中,最多存取5位中文字元,或者10位英文或數字字元,即中文字元佔2個長度,英文或數字佔1個長度。

nchar:定長的,同char,小於定義長度則補空格,不同的是,比char多了個“N”,表示儲存的是Unicode資料型別的字元,nchar(10)中,最多存取10位中文、英文或數字字元,即中文、英文或數字都是佔1個長度。

由於char和nchar都是在小於定義長度時補空格,所以往往讀取的時候程式需要做一下 trim()的操作。

varchar:儲存變長的資料。當你儲存的資料是變長的,且不超過一個固定的長度n時,則可定義長varchar(n),而實際上,varchar的長度是n+1,還有1個長度是用來儲存實際使用了多少長度。

nvarchar:同char和nchar的區別,中文字元在varchar中佔2個長度,在nvarchar中佔1個長度。

text:儲存變長的資料。最大長度為2^31-1個字元

ntext:同char和nchar的區別,文字元在text中佔2個長度,在ntext中佔1個長度。

如下圖的測試中可見:


除了上面的測試和提到的區別,我還查詢了一些相關的資料,這裡只做一下簡單的筆記說明。

char欄位的索引效率級高,而varchar雖然沒有char高,但是和char相比其實處理速度是差不多的。

而索引中列總長度最多為900位元組,所以長度大於900的char、varchar和大於450的nchar、nvarchar會無法建立索引

text、ntext上也是無法建立索引的。

多了個n開頭的型別,速度上都會慢一些,比如nvarchar要比varchar處理起來慢些。

在選擇上,我總結一下:

如果是純英文或數字,就選擇char、varchar,如果是中英文數字混合的,則可選擇nchar、nvarchar

定長的則選擇char、nchar,如性別欄位,F\M則char(1),不定長的則選擇varchar、nvarchar

如查詢且希望索引的話,則長度定在400以內吧。

不需要做查詢或索引的,也可考慮text和ntext。

像部落格這樣的內容欄位,要把編輯器生成的html程式碼存取進去,可使用nvarchar(max)或者ntext欄位。