char 和 varchar (Transact-SQL)

這些是固定長度或可變長度的字元資料類型。

  • char [ ( n ) ]
    這些是長度為 n 位元組的固定長度非 Unicode 字元資料。n 必須是 1 到 8,000 的值。儲存體大小是 n 位元組。char 的 ISO 同義字是 character。

  • varchar [ ( n | max ) ]
    可變長度,非 Unicode 字元資料。n 可以是 1 到 8,000 的值。max 表示最大儲存體大小是 2^31-1 位元組。儲存體大小是輸入資料的實際長度再加上 2 位元組。輸入的資料長度可以是 0 字元。varchar 的 ISO 同義字是 char varying 或 character varying。

備註

如果資料定義或變數宣告陳述式中沒有指定 n,則預設長度是 1。如果 n 不是在使用 CAST 和 CONVERT 函數時所指定的,預設長度便是 30。

除非利用 COLLATE 子句指派了特定定序,否則,使用 char 或 varchar 的物件會被指派資料庫的預設定序。定序會控制用來儲存字元資料的字碼頁。

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

  • 當資料行資料項目的大小不一致時,請使用 char。

  • 當資料行資料項目的大小變化相當大時,請使用 varchar。

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

如果執行 CREATE TABLE 或 ALTER TABLE 時,SET ANSI_PADDING 是 OFF,就會將定義為 NULL 的 char 資料行當作 varchar 來處理。

當定序字碼頁使用雙位元組字元時,儲存體大小仍是 n 位元組。儲存體大小 n 位元組有可能少於 n 個字元,這會隨著字元字串而不同。

範例

A. 顯示在變數宣告中使用時,n 的預設值。

下列範例會顯示當在變數宣告中使用 char 和 varchar 資料類型時,n 的預設值是 1。

DECLARE @myVariable AS varchar
DECLARE @myNextVariable AS char
SET @myVariable = 'abc'
SET @myNextVariable = 'abc'
--The following returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);
GO

B. 顯示搭配 CAST 和 CONVERT 來使用 varchar 時,n 的預設值。

下列範例會顯示搭配 CAST 和 CONVERT 函數來使用 char 或 varchar 資料類型時,n 的預設值是 30。

DECLARE @myVariable AS varchar(40)
SET @myVariable = 'This string is longer than thirty characters'
SELECT CAST(@myVariable AS varchar)
SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';
SELECT CONVERT(char, @myVariable)
SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';