SqlServer中的Char、Varchar和Nvarchar詳解

Char

char是定長的,也就是當你輸入的字符小於你指定的數目時,會在後面補空值。比如定義char(10),你輸入的字符小於10時,它會再後面補空值。當你輸入的字符大於10時,它會截取超出的字符,總之都會佔10個字節的空間。char存儲定長數據很方便,char字段上的索引效率極高,因爲是固定長度,所以速度效率高。一個英文字符佔一個字節,一個漢字兩個字節。

(由於char是以固定長度的,所以它的速度會比varchar快得多!但程序處理起來要麻煩一點,要用trim之類的函數把兩邊的空格去掉!)

nvarchar(n)

包含 n 個字符的可變長度 Unicode 字符數據。n 的值必須介於 1 與 4,000 之間。最多可存儲4000個字符,無論英文還是漢字.varchar[(n)] 

Varchar

如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義爲 Varchar(10)是最合算的。存儲變長數據,所以不以空格填滿,但存儲效率沒有CHAR高。Varchar類型的實際長度是它的值的實際長度+1。爲什麼“+1”呢?這一個字節用於保存實際使用了多大的長度。  最多8000個英文,4000個漢字。

varchar一般適用於英文和數字,Nvarchar適用中文和其他字符。

sqlserver中varchar最大長度是8000,但是可以使用varchar(max),可以達到2G。(解釋:數據庫文件由區組成的,而區由八個物理上連續的頁組成,頁是SQL中存儲數據的基礎單位,數據就記錄存在數據頁。一個頁大小爲8K(8192字節),數據庫中的數據文件(.mdf 或.ndf)分配的磁盤空間可以從邏輯上劃分成頁(從 0 到 n 連續編號)。磁盤 I/O 操作在頁級執行,也就是說,SQL Server 每次讀取或寫入數據的最少數據單位是數據頁。數據頁由頁頭(96字節),數據行,行偏移量(最少36個字節)三部分組成,所以數據行的最大長度是8x1024-96-36-7=8060,7表示SQL Server還需要對每一行的數據最少附加7字節的系統數據。)

• 比較:

1.定長或變長

所謂定長就是長度固定,當要保存的數據長度不夠時將自動在其後面填充英文空格,使長度達到相應的長度;有var前綴的,表示是實際存儲空間是動態變化的,比如varchar,nvarchar變長字符數據則不會以空格填充。

2.Unicode或非Unicode

數據庫中,英文字符只需要一個字節存儲就足夠了,但漢字和其他衆多非英文字符,則需要兩個字節存儲。如果英文與漢字同時存在,由於佔用空間數不同,容易造成混亂,導致讀取出來的字符串是亂碼。Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。而前綴n就表示Unicode字符,比如nchar,nvarchar,這兩種類型使用了Unicode字符集。

3.幾種數據類型的存儲的最大容量

char,varchar 最多8000個英文,4000個漢字

nchar,nvarchar  最多可存儲4000個字符,無論英文還是漢字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章