char および varchar (Transact-SQL)
固定長または可変長の文字列データ型です。
char [ ( n ) ]
Unicode ではない固定長の文字列データです。n では文字列の長さを定義し、指定できる値の範囲は 1 ~ 8,000 です。記憶領域のサイズは n バイトです。照合順序のコード ページで 2 バイト文字が使用されている場合、記憶領域のサイズは 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 の既定値
次の例は、char 型または varchar 型が CAST 関数および CONVERT 関数と共に使用された場合に、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';