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 になります。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 型として扱われます。
照合順序のコード ページで 2 バイト文字が使用されている場合、記憶領域のサイズは 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 の既定値
次の例は、char 型または varchar 型が CAST 関数および CONVERT 関数と共に使用された場合に、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';