文字資料要用哪種資料型別儲存char, varchar, nchar, nvarchar

http://dnowba.blogspot.com/2011/10/char-varchar-nchar-nvarchar.html


◎字元字串

資料類型範圍儲存體
char [ ( n ) ]n 必須是 1 到 8,000 的值。1字元=1位元組
varchar [ ( n | max ) ]可變長度。n 可以是 1 - 8,000。max 表示最大是 2^31-1 位元組。1字元=1位元組
text可變長度非 Unicode 資料,最大是 2^31-1 (2,147,483,647) 個字元。1字元=1位元組



◎Unicode 字元字串
資料類型範圍儲存體
nchar [ ( n ) ]n 字元的固定長度 Unicode 字元資料。n 必須是 1 到 4,000 的值。1word =2位元組
nvarchar [ ( n | max ) ]可變長度,Unicode 字元資料。n 可以是 1 到 4,000 的值。
max 表示最大儲存體大小是 2^31-1 位元組。
1word =2位元組
ntext可變長度 Unicode 資料,最大長度為 2^30 - 1 (1,073,741,823) 個字元1word =2位元組

現在我們綜合整理一下:

char和nchar的差別:

差一個「n」,就是你使用的是不是unicode編碼的字,如果你要設計跨國別/語言的平臺,那麼用unicode最好,也許你有一個經驗,以前使用對岸軟體時,安裝完後一堆亂碼,這是因為發行軟體(gb編碼)和你的作業系統(big5編碼)不同,造成解譯上的錯誤…所以我建議加個「n」…用unicode國際語言統一編碼,雖然這個時候連英文字都變成了2byte,但可以保證的是一個碼就是對應一個符號,不會亂掉。

nchar和nvarchar的差別:

差一個「var」,是指你的資料表儲存空間,要使用固定長度,還是隨內容調整。舉例來說,如果我設分別在二個資料表設定資料類型為nchar(500)和nvarchar(500),輸入同樣的文字內容「我是大帥哥」,在nvarchar(500)裡頭就只佔了10byte=80bit的儲存空間;但在nchar(500)因為長度固定,會自動在「我是大帥哥」這些字後面自動加空格填滿(喔…空格可也是算一種編碼的),所以不管怎樣都是500byte=4000bit….

nchar 和 nvarchar 效能上,你覺得哪個比較好:這要看情況,在相同文字內容(100byte)下,nchar(500)和nvarchar(500)比較,你可以感覺到nvarchar相對節省空間,自然加快索引。但是如果那篇文字內容一直被修改的話…那麼因為儲存空間不像nchar那樣先被保留住某區塊,所以這個時候 nvarchar 反而因為儲存空間不連續導致讀取時的效能降低…所以長時間會修改的資料…用nchar反而較好。

另外一個支持nvarchar比較好的論點就是一般O/R Mapping中對應實體的屬性類型是string,所以可變長度的型別和mapping比較吻合。

text和ntext不常用的原因:

這和sql server 的「索引」技術有關,text 和 ntext 是不支援的
索引最大長度限制是900byte,這個索引就和我們在windows 7上搜尋某資料時,他都會建議你建立「索引」的功能一樣,目的是提昇你查資料的速度。所以我們設一些固定資料內容時,可以以900byte為限,如設nvarchar (900)。


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