SQL Server中數據類型之char、nchar、varchar、nvarchar的用法

char數據類型

char數據類型是固定長度的非unicode字符數據,如果是英文字符,佔用1個字節,如果是漢字,佔用2個字節。列如:char(10),可以存10個英文字母,5個漢字。

char數據類型存儲固定長度數據很方便,char字段上的索引效率極高,比如定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要佔去10個字節的空間。因爲是固定長度,所以速度效率高。

char數據類型因存儲固定長度數據,它的缺點也是很明顯,比如定義char(10),如果存的字符的個數小於10,其它空間會用空格補上,導致在查詢數據時非常不方便。程序處理起來要麻煩一點,要用trim之類的函數把兩邊的空格去掉。

 

 

Nchar數據類型

nchar數據類型對每個英文(ASCII)字符都佔用2個字節,對一個漢字也佔用兩個字節,所有的字符都佔用2個字節。

例如:nchar(10),可以存10個英文字母,也可以存10個漢字,如果存的字符的個數小於10,其它空間會用空格補上。

 

varchar數據類型

varchar數據類型是可變長度非Unicode數據,例如:varchar(10),存10個字母,5個漢字。如果存的字符的個數小於10,其它空間不會用空格補上。

如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義爲 VARCHAR(10)是最合算的。

Varchar類型:Varchar 的類型不以空格填滿,而Char則會填充滿爲止,如varchar(100),但它的值只是"abcd",所以它在數據庫中存的值就是"abcd",而char 不一樣,如char(100),它的值是"abcd",而實際上它在數據庫中是"abcd "(abcd後共有96個空格,就是把它填滿爲100個字節)。

 

nvarchar數據類型

nvarchar數據類型是可變長度的Unicode數據。

nvarchar在SQL Server中是採用Unico來存儲數據的,中文字符存儲到SQL Server中會保存爲兩個字節(一般採用Unico編碼)。

正常情況下,我們使用varchar也可以存儲中文字符,但是如果遇到操作系統是英文操作系統並且對中文字體的支持不全面時,在SQL Server存儲中文字符爲varchar就會出現亂碼(顯示爲??),唯一能解決問題的是把數據庫字段的類型改爲nvarchar或 者nchar。

使用nvarchar的另一個非常好處就是在判斷字符串的時候可以不需要考慮中英文兩種字符的差別.當然,使用nvarchar存儲英文字符會增大一倍的存儲空間,但是在存儲代價已經很低廉的情況下,優先考慮兼容性會給你帶來更多好處的。

 

 

這四種數據類型名字上看nchar\nvarchar比char\varchar前面多了個“n”。它表示存儲的是Unicode數據類型的字符。英文字符只需要一個字節存儲就足夠了,但漢字需要兩個字節存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較爲方便,但在存儲英文時數量上有些損失。

 

 

 

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