1. 程式人生 > >資料庫中char varchar nchar nvarchar的區別

資料庫中char varchar nchar nvarchar的區別

資料庫中char varchar nchar nvarchar的區別

          我們在進行資料庫的設計的時候,很多情況下表中的欄位都是用的是字串型別的資料,其中就有四種選擇char varchar nchar nvarchar,我們該如何進行?


          四種類型的詳細說明

          char:固定長度,非Unicode字元資料(對英文(ASCII)字元佔用1個位元組,對一個漢字佔用2個位元組)。

          用來儲存定長資料,長度為n個位元組,n的取值範圍為1至8,000,儲存大小是n個位元組。

          varchar:可變長度,非Unicode字元資料(對英文(ASCII)字元佔用1個位元組,對一個漢字佔用2個位元組)。

          用來儲存變長資料,長度為n的位元組,n的取值範圍為1至8,000,max指示最大儲存大小是2^31-1個位元組,儲存大小是輸入資料的實際長度加2個位元組,所輸入資料的長度可以為0個字元。

          nchar:固定長度,Unicode字元資料。

          n個字元,n值必須在1到4,000之間(含)。儲存大小為兩倍n位元組。

          nvarchar:可變長度,Unicode字元資料。

          n個字元,n值在1到4,000之間(含)。max指示最大儲存大小為2^31-1位元組,儲存大小是所輸入字元個數的兩倍+2個位元組,所輸入資料的長度可以為0個字元。

          Unicode或非Unicode的區別

          非Unicode:char,varchar

          Unicode:nchar,nvarchar

          資料庫中,英文字元只需要一個位元組儲存就足夠了,但漢字和其他眾多非英文字元,則需要兩個位元組儲存,如果英文與漢字同時存在,由於佔用空間數不同,容易造成混亂,導致讀取出來的字串是亂碼。

          Unicode字符集就是為了解決字符集這種不相容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。而字首n就表示Unicode字元,比如nchar,nvarchar,這兩種型別使用了Unicode字符集。

          定長和變長的區別:

          定長:char,nchar

          變長:varchar,nvarchar

          定長就是長度固定,沒有var字首的,當要儲存的資料長度不夠時將自動在其後面填充英文空格,使長度達到相應的長度。

          變長就是長度可變,有var字首的,表示是實際儲存空間是動態變化的,比如varchar,nvarchar變長字元資料則不會以空格填充。

          儲存容量上的區別:

          char,varchar:最多8000個英文,4000個漢字

          nchar,nvarchar:可儲存4000個字元,無論英文還是漢字

          如果,長度超過了4000個字元,使用的是text文字型別。

          儲存效率上的區別:

          char,nchar:定長,速度快,佔空間大,需處理

          varchar,nvarchar:變長,速度慢,佔空間小,無需處理

          速度:這裡的速度指的是存取的速度。

          處理:主要是對應用程式來說的,如果使用char,nchar則需要用trim之類的函式把兩邊的空格去掉。

          一般來說

          如果純英文和數字,用char/varchar

          如果含有中文字元,nchar/nvarchar