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 Warehouse Microsoft Fabric SQL Database
固定長または可変長のバイナリ データ型です。
引数
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 のバージョン間で異なる場合があります。
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
最終的な値は 57921
ではなく 123457
になります。
Note
任意のデータ型と binary データ型の間の変換は、SQL Server のバージョン間で同じであるとは限りません。
制限事項
現在、Microsoft Fabric では varbinary(n) のみがサポートされます。 binary データ型と varbinary(max) データ型はサポートされません。