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
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
