转换 binary 和 varbinary 数据

当数据从字符串数据类型(charvarcharncharnvarcharbinaryvarbinarytextntext image)转换为不同长度的 binaryvarbinary 数据类型时,Microsoft® SQL Server™ 将在数据的右边进行填充或截断。当其它数据类型转换为 binaryvarbinary 时,将在数据左边进行填充或截断。填充是使用十六进制的零来完成的。

如果二进制数据是移动数据的最容易的方式,则将数据转换为 binaryvarbinary 数据类型对于数据移动很有用。对于任何类型的任何值,将该值转换为足够大的二进制值,然后转换回原类型,如果是在同一 SQL Server 版本上进行这两种转换,则始终导致相同的值。值的二进制表示法可能在 SQL Server 的版本间有所变更。

因为存储表达的改变,在 moneydatetime、smalldatetimenumeric 数据类型和 binaryvarbinary 之间的转换与早期版本的 SQL Server 有所不同。

可以将 int、smallinttinyint 转换到 binary 或者 varbinary,但是如果将 binary 数据转回到整型数据,如果发生截断的话,将会得到与原来不同的整型数值。例如,下面这个 SELECT 语句显示整型数据通常是以二进制 0x0001e240 存储的:

SELECT CAST( 123456 AS BINARY(4) )

本 SELECT 语句显示如果这个二进制目标太小,不能保存整个数值,那么前导位就会被静默地截断,这样该数字就被存为 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 数据类型之间的转换是一致的。

请参见

CAST 和 CONVERT

数据类型