次の方法で共有


binary と varbinary (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のSQL 分析エンドポイント Microsoft Fabric のウェアハウス

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

引数

binary [ ( n ) ]

n バイトの固定長の binary データです。ここで、n は 1 から 8,000 の値になります。 ストレージのサイズは n バイトです。

varbinary [ ( n | max ) ]

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

解説

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

データ型 次の場合に使用
[バイナリ] 列データ エントリのサイズが一定である。
varbinary 列データ エントリのサイズが大幅に変化する。
varbinary(max) 列データ エントリのサイズが 8,000 バイトを超える。

binary および varbinary 型データの変換

データが文字列データ型からデータ長の異なる binary または varbinary データ型に変換される場合、SQL Server によりデータの右側の桁が埋め込まれるか、切り捨てられます。 文字列データ型は次のとおりです。

  • char
  • varchar
  • nchar
  • nvarchar
  • [バイナリ]
  • varbinary
  • text
  • ntext
  • image

他のデータ型が変換される場合 binary または varbinary, 、データが埋め込まれるか、左側に切り捨てられます。 桁の埋め込みには 16 進数の 0 が使用されます。

データの binary データ型と varbinary データ型への変換は、データ間を移動するもっとも簡単な方法がbinary データである場合に便利です。 ある時点で、値の型をサイズが十分に大きなバイナリ値に変換し、その後、元に戻すことがあります。 両方の変換が同じバージョンの SQL Server で行われる場合、この変換では常に結果的に同じ値が生成されます。 値の 2 進表現は、SQL Server のバージョン間で異なる場合があります。

intsmallinttinyintbinary または 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

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

Note

任意のデータ型と binary データ型の間の変換は、SQL Server のバージョン間で同じであるとは限りません。

制限事項

現在、Microsoft Fabric では varbinary(n) のみがサポートされます。 binary データ型と varbinary(max) データ型はサポートされません。

関連項目