binary と varbinary (Transact-SQL)

固定長または可変長のバイナリ データ型です。

  • binary [ ( n ) ]
    長さ n バイトの固定長のバイナリ データです。n は 1 ~ 8,000 の値になります。 記憶領域のサイズは n バイトです。

  • varbinary [ ( n | max) ]
    可変長 binary データ。 n に指定できる値の範囲は 1 ~ 8,000 です。 max は最大格納サイズが 2^31-1 バイトであることを示します。 格納サイズは、入力したデータの実際の長さ + 2 バイトとなります。 入力するデータの長さは 0 バイトでもかまいません。 varbinary の ANSI SQL シノニムは binary varying です。

説明

データ定義または変数宣言ステートメントで n を指定しないと、既定の長さは 1 になります。 CAST 関数で n を指定しないと、既定の長さは 30 になります。

列データ エントリのサイズが一定の場合は、binary を使用します。

列データ エントリのサイズが大幅に変化する場合は、varbinary を使用します。

列データ エントリのサイズが 8,000 バイトを超える場合は、varbinary(max) を使用します。

binary 型データと varbinary 型データの変換

データが文字列データ型 (char、varchar、nchar、nvarchar、binary、varbinary、text、ntext、または image) からデータ長の異なる binary データ型または varbinary データ型に変換される場合、SQL Server によりデータの右側の桁が埋め込まれるか、切り捨てられます。 他のデータ型から binary 型または varbinary 型に変換する場合は、データの左側の桁が埋め込まれるか、切り捨てられます。 桁の埋め込みには 16 進数の 0 が使用されます。

binary 型のデータは移動が容易なので、データを binary 型や varbinary 型に変換すると便利です。 データがどのような型や値であっても、その値を十分な大きさのバイナリ値に変換し、その後元の型に変換すると、両方の変換が同じバージョンの SQL Server で実行された場合は、常に元の値に戻ります。 値の 2 進表現は、SQL Server のバージョン間で異なる場合があります。

int、smallint、および tinyint を binary または varbinary に変換することはできますが、binary 型の値を再度 integer 型の値に戻した場合、切り捨てが行われていると、この値は最初の integer の値とは同じになりません。 たとえば、次の SELECT ステートメントは整数値 123456 を通常はバイナリ値 0x0001e240 として格納することを示しています。

SELECT CAST( 123456 AS BINARY(4) );

ただし、次の SELECT ステートメントは、変換先の binary 型が小さすぎて値全体を保持できない場合は、左側の桁が暗黙的に切り捨てられ、同じ数値が 0xe240 として格納されることを示します。

SELECT CAST( 123456 AS BINARY(2) );

次のバッチは、暗黙的な切り捨てが算術演算に影響を与えることがあり、その場合でもエラーが生成されないことを示します。

DECLARE @BinaryVariable2 BINARY(2);

SET @BinaryVariable2 = 123456;
SET @BinaryVariable2 = @BinaryVariable2 + 1;

SELECT CAST( @BinaryVariable2 AS INT);
GO

最終的な値は 123457 ではなく 57921 になります。

注意

他のデータ型と binary 型との変換は、どのバージョンの SQL Server でも同じになるという保証はありません。

関連項目

参照

CAST および CONVERT (Transact-SQL)

データ型 (Transact-SQL)

概念

データ型の変換 (データベース エンジン)