binary 和 varbinary (Transact-SQL)
固定長度或可變長度的二進位資料類型。
binary [ ( n ) ]
固定長度的二進位資料,其長度為 n 位元組,n 代表 1 到 8,000 的值。 儲存體大小是 n 位元組。varbinary [ ( n | max) ]
可變長度的二進位資料。 n 可以是 1 到 8,000 之間的值。 max 表示儲存體大小上限是 2^31-1 個位元組。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 輸入的資料有可能是 0 位元組。 varbinary 的 ANSI SQL 同義字是 binary varying。
備註
當資料定義或變數宣告陳述式中沒有指定 n 時,預設長度為 1。 當 n 不是由 CAST 函數指定時,預設長度為 30。
當資料行資料項目的大小不一致時,請使用 binary。
當資料行資料項目的大小變化相當大時,請使用 varbinary。
如果資料行資料項目超過 8,000 位元組,請使用 varbinary(max)。
轉換 binary 與 varbinary 資料
當資料從字串資料類型 (char、varchar、nchar、nvarchar、binary、varbinary、text、ntext 或 image) 轉換成不等長的 binary 或 varbinary 資料類型時,SQL Server 會填補或截斷右邊的資料。 將其他資料類型轉換成 binary 或 varbinary 時,則在左邊填補或截斷資料。 使用十六進位零進行填補。
如果 binary 資料是搬移資料最簡易的方式,將資料轉換成為 binary 和 varbinary 資料類型會非常有幫助。 將各種資料類型的值轉換為有足夠大小的二進位值,然後再將值轉換回原來的資料類型,如果兩個轉換都在相同版本的 SQL Server 上進行,那麼將會得到相同的值。 數值的二進位表示法可能會隨著不同的 SQL Server 版本而變更。
您可以將 int、smallint 和 tinyint 轉換成 binary 或 varbinary,但如果您將 binary 值轉換回整數值,若有發生截斷,則此值會與原始的整數值不同。 例如,下列 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。
[!附註]
在 SQL Server 版本之間轉換任何資料類型與 binary 資料類型,不保證結果都會一樣。