標籤:des http 使用 strong ar 資料 問題 sp html
varchar(n),nvarchar(n) 中的n怎麼解釋:
nvarchar(n)最多能存n個字元,不區分中英文。
varchar(n)最多能存n個位元組,一個中文是兩個位元組。
所佔空間:
nvarchar(n)一個字元會佔兩個位元組空間。
varchar(n)中文佔兩位元組空間,英文佔一個。
n的取值範圍:
nvarchar(n) n的範圍是:1與4000之間
varchar(n) n的範圍是:1與8000之間
n的大小是否會影響效能:
varchar及nvarchar裡的長度 n 不會影響空間大小及效能。除非n是max並且內容大於4000或8000
設定n更多的是業務需要,如限制身份證只能輸入18位,再多就報錯,或者防止惡意攻擊撐爆硬碟。對空間及效能都沒有影響
n設定多大比較好:
既然對空間及效能都沒有影響,那我們只要考慮業務需要就可以了,我分析過微軟的資料庫,大都設定為:256,也會看到64,128,512,max等,可能是便於記憶吧。
varchar(n),nvarchar(n)儲存空間舉例解釋:
包含 n 個字元的可變長度 Unicode 字元資料。位元組的儲存大小是所輸入字元個數的兩倍。
兩欄位分別有欄位值:我和coffee
那麼varchar欄位佔2×2+6=10個位元組的儲存空間,而nvarchar欄位佔8×2=16個位元組的儲存空間。
如欄位值只是英文可選擇varchar,而欄位值存在較多的雙位元組(中文、韓文等)字元時用nvarchar。
varchar和nvarchar如何選擇?
varchar在SQL Server中是採用單位元組來儲存資料的,nvarchar是使用Unicode來儲存資料的.中文字元儲存到SQL Server中會儲存為兩個位元組(一般採用Unicode編碼),英文字元儲存到資料庫中,如果欄位的類型為varchar,則只會佔用一個位元組,而如果欄位的類型為nvarchar,則會佔用兩個位元組.
正常情況下,我們使用varchar也可以儲存中文字元,但是如果遇到作業系統是英文作業系統並且對中文字型的支援不全面時, 在SQL Server儲存中文字元為varchar就會出現亂碼(顯示為??).而且正常情況下,主機都會支援中文的環境,所以如果使用varchar來儲存資料,在開發階段是發現不了的.多數情況下,在布署的時候也不會有問題.
但是!如果布署的主機是英文作業系統,並且不支援中文環境,那問題就出來了.所有的varchar欄位在儲存中文的時候都會變成亂碼(顯示為??).而且一般情況下你不會知道這是因為你採用了錯誤的資料類型來儲存所造成的,你會試著去裝中文字型,試著去設定作業系統的語言環境...這些都不能解決問題,唯一能解決問題的是把資料庫欄位的類型個性為nvarchar(或者nchar).對專案管理比較熟悉的朋友應該都知道,到布署階段再來修改資料庫是一個很恐怖的事情.
使用nvarchar的另一個非常好處就是在判斷字串的時候可以不需要考慮中英文兩種字元的差別.
當然,使用nvarchar儲存英文字元會增大一倍的儲存空間.但是在儲存代價已經很低廉的情況下,優先考慮相容性會給你帶來更多好處的.
所以在Design的時候應該盡量使用nvarchar來儲存資料.只有在你確保該欄位不會儲存中文的時候,才採用varchar來儲存.
以下內容來源於: <http://topic.csdn.net/u/20100326/14/d8d6b235-31ed-4167-8ddf-945953da67f9.html>
如果 varchar(300) 和 varchar(8000) 都儲存相同的字元數,效能上是沒有差別的,儲存行為上也沒有不同。因為它們都有相同的儲存結構,兩個位元組的位移,兩個位元組的列數(如果表中所有的列都是 varchar 類型)。區別只在於儲存容量上。
大多數的效能比較都集中在 varchar 和 char,varchar 和 varchar(max) 上。還有,行外儲存(SQL Server 2005 支援的)。
varchar(max) (lob 類型)與 varchar 儲存方式是不同的。
當 LOB 資料足夠小時,可以考慮將資料直接儲存在資料行(行所在的資料頁面)中,從而可以避免額外的讀取 LOB 頁面,提升訪問 LOB 資料的效率(將 LOB 資料直接儲存在資料頁面的閾值由 text in row 選項設定)。
而當 LOB 資料大於此閾值,或者所在行的大小超過了 8060 位元組(單行最大 SIZE),LOB 資料將會儲存在 LOB 頁面,而在資料頁面中保留一個指向 LOB 頁面的 16 位元組的指標。其訪問效率當然會將低。
另外還有,惡意使用者可以利用這一點“撐爆”你的磁碟。
引用:
varchar(n),nvarchar(n) 長度、效能、及所佔空間分析
http://www.yongfa365.com/item/SQLServer-varchar-nvarchar.html
varchar(n),nvarchar(n) 長度、效能、及所佔空間分析 nvarchar(64) nvarchar(128) nvarchar(256)(轉)