程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> char、varchar、nchar、nvarchar的區別

char、varchar、nchar、nvarchar的區別

編輯:更多數據庫知識

SQLServer中有char、varchar、nchar、nvarchar四種類型來對應(暫時不考慮text和ntext),開建立數據庫中,對這四種類型往往比較模糊,這裡做一下對比。

  1. 定長或變長
    所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;有var前綴的,表示是實際存儲空間是變長的,比如varchar,nvarchar變長字符數據則不會以空格填充,比較例外的是,text存儲的也是可變長。
  2. Unicode或非Unicode
    數據庫中,英文字符只需要一個字節存儲就足夠了,但漢字和其他眾多非英文字符,則需要兩個字節存儲。如果英文與漢字同時存在,由於占用空間數不同,容易造成混亂,導致讀取出來的字符串是亂碼。Unicode字符集就是為了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。而前綴n就表示Unicode字符,比如nchar,nvarchar,這兩種類型使用了Unicode字符集。
  3. 基於以上兩點來看看字段容量
    char,varchar 最多8000個英文,4000個漢字 nchar,nvarchar 可存儲4000個字符,無論英文還是漢字
  4. 使用(個人偏好)
    如果數據量非常大,又能100%確定長度且保存只是ansi字符,那麼char
    能確定長度又不一定是ansi字符或者,那麼用nchar
    對於超大數據,如文章內容,使用nText
    其他的通用nvarchar

char、varchar、nchar、nvarchar特點比較

  • CHAR
    CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要占去10個字節的空間。
  • VARCHAR
    存儲變長數據,但存儲效率沒有CHAR高,如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什麼"+1"呢?這一個字節用於保存實際使用了多大的長度。

從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

  • TEXT
    text
    存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字符。
  • NCHAR、NVARCHAR、NTEXT
    這三種從名字上看比前面三種多了個"N"。和charvarchar比較起來,ncharnvarchar最多存儲4000個字符,不論是英文還是漢字;而charvarchar最多能存儲8000個英文,4000個漢字。可以看出使用ncharnvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數量上有些損失。

所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數字,用char/varchar

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved