SQL Server中nvarchar和varchar的區別

一、varchar(n)數據庫

  長度爲 n 個字節的可變長度且非 Unicode 的字符數據,n 必須是一個介於 1 和 8,000 之間的數值,存儲大小爲輸入數據的字節的實際長度,而不是 n 個字節,所輸入的數據字符長度能夠爲零。字體

二、nvarchar(n)編碼

  包含 n 個字符的可變長度 Unicode 字符數據,n 的值必須介於 1 與 4,000 之間,字節的存儲大小是所輸入字符個數的兩倍,所輸入的數據字符長度能夠爲零。操作系統

三、兩種數據類型的區別設計

      首先,varchar和nvarchar都能存儲漢字,區別在於:一個漢字佔varchar(2),只佔nvarchar(1),而字母只佔varchar(1),那麼在數據庫字段求長度的時候,用varchar就不必定知道它確切有幾個字符,若是用nvarchar,漢字也是nvarchar(1),字母也是nvarchar(1),那麼很容易知道字段的長度了。code

  其次,varchar的檢索快於nvarchar,varchar在SQL Server中是採用單字節來存儲數據的,nvarchar是使用Unicode來存儲數據的,中文字符存儲到SQL Server中會保存爲兩個字節(通常採用Unicode編碼),英文字符保存到數據庫中,若是字段的類型爲varchar,則只會佔用一個字節,而若是字段的類型爲nvarchar,則會佔用兩個字節。正常狀況下,咱們使用varchar也能夠存儲中文字符,可是若是遇到操做系統是英文操做系統而且對中文字體的支持不全面時,在SQL Server存儲中文字符爲varchar就會出現亂碼(顯示爲??),並且正常狀況下,主機都會支持中文,因此若是使用varchar來存儲數據,在開發階段是發現不了問題的,多數狀況下,在佈署的時候也不會有問題,可是,若是佈署的主機是英文操做系統,而且不支持中文,那問題就出來了,全部的varchar字段在存儲中文的時候都會變成亂碼(顯示爲??),並且通常狀況下你不會知道這是由於你採用了錯誤的數據類型形成的,你會試着去裝中文字體,試着去設置操做系統的語言環境,這些都不能解決問題,惟一能解決問題的方法是把數據庫字段的類型改成nvarchar(或者nchar),對項目管理比較熟悉的朋友應該都知道,到佈署階段再來修改數據庫是一件很恐怖的事情。項目管理

  最後,使用nvarchar的另外一個好處就是在判斷字符串的時候能夠不須要考慮中英文兩種字符的差異,固然,使用nvarchar存儲英文字符會增大一倍的存儲空間,可是在存儲代價已經很低廉的狀況下,優先考慮兼容性會給你帶來更多好處,因此在設計的時候應該儘可能使用nvarchar來存儲數據,只有在你確保該字段不會存儲中文的時候,再採用varchar來存儲。開發

相關文章
相關標籤/搜索