認識Char/NChar/VarChar/NVarChar/Text/NText

Char/NChar/VarChar/NVarChar/Text/NText,這幾個資料型別或許有些人很熟,有些人只熟其中幾個,尤其是程式設計師,不碰DB Design的,如果有碰到,也可能依"慣例"的去設定資料型別,所以不難看見,有些Table資料型別很單調,看的到的型別不多,只要是存文字的,都是 NVarChar,或許在瞭解後,可以做出更好的規劃.

Char/NChar/VarChar/NVarChar/Text/NText,這幾個資料型別或許有些人很熟,有些人只熟其中幾個,尤其是程式設計師,不碰DB Design的,如果有碰到,也可能依"慣例"的去設定資料型別,所以不難看見,有些Table資料型別很單調,看的到的型別不多,只要是存文字的,都是NVarChar,或許在瞭解後,可以做出更好的規劃.

其實這個的識別方式很簡單.

Var的 : 代表就是非固定長度的型別,所以Var在存不固定長度的資料時,會較省空間,

N的 : 就是支援Unicode,但要注意,儲存的資料會大兩倍.

這樣就把Char全部講完,剩Text跟Char有什麼不同,Text的特性跟VarChar一樣,只是用來儲存大量的文字資料,但後來的VarChar也做了調整,也可以存大量的文字資料,所以Text在未來新版的DB會移除.

 

Char的長度為1~8000

VarChar的長度為1~8000,如果是VarChar(max)就是2^31-1 位元組,VarChar(max)只有SQL2005(含)以上才支援,SQL2000就沒有.

Text的長度為2^31-1,它的長度跟VarChar(max)是一樣的.

 

在MSDN的Char與VarChar的備註有點問題:

如果您有支援多國語言的網站,請考慮利用 Unicode ncharnvarchar 資料類型,將字元轉換問題減到最少。如果您使用 charvarchar,我們建議您執行下列動作:

  • 當資料行資料項目的大小不一致時,請使用 char
  • 當資料行資料項目的大小變化相當大時,請使用 varchar
  • 當資料行資料項目的大小變化相當大,且大小可能超出 8,000 位元組時,請使用 varchar(max)

紅色的那一段,應該是”當資料行資料項目的大小一致時,請使用char。”

見英文版:

Use char when the sizes of the column data entries are consistent.

 

在底下有個Data Type Performance Tuning Tips for Microsoft SQL Server,這是個不錯的參考網站~

當然DB裡還有相當多的型別,這裡就只大概針對Char做了一點說明,其它就參考MSDN上的說明.

 

參考 :

ntext、text 和 image (Transact-SQL)

char 和 varchar (Transact-SQL)

資料類型 (Transact-SQL)

Data Type Performance Tuning Tips for Microsoft SQL Server