char 和 varchar (Transact-SQL)

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

  • char [ ( n ) ]
    固定長度的非 Unicode 字串資料。n 會定義字串長度,而且必須是 1 到 8,000 之間的值。儲存體大小是 n 位元組。當定序字碼頁使用雙位元組字元時,儲存體大小仍是 n 位元組。根據字串,n 位元組的儲存體大小可能小於 n 的值。char 的 ISO 同義字是 character。

  • varchar [ ( n | max ) ]
    可變長度的非 Unicode 字串資料。n 會定義字串長度,而且可以是 1 到 8,000 之間的值。max 表示最大儲存體大小是 2^31-1 位元組 (2 GB)。儲存體大小 (以位元組為單位) 是實際輸入資料的值 + 2 位元組。varchar 的 ISO 同義字是 char varying 或 character varying。

備註

當資料定義或變數宣告陳述式中沒有指定 n 時,預設長度為 1。使用 CAST 和 CONVERT 函數時,如果沒有指定 n,預設長度就是 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 來處理。

範例

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

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

DECLARE @myVariable AS varchar = 'abc', @myNextVariable AS char = '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) = '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';