数字转换与SQL Server中数据类型的长度不匹配

数字转换与SQL Server中数据类型的长度不匹配,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我使用数据类型bigInt引用以下数字 DECLARE @Number Bigint = '269687584' 当我将数据类型转换为Varbinary(4)时,它返回0x10131B20 但是当我计算Varbinary数据的长度时,它只返回3。 我不知道到底出了什么事 在SQL Server数据库中,我想编写一个查询,将Bigint转换为 Varbinary(4),但仅转换为Varbinary(3) 以下是我尝试过的: DECLARE @Number BIGINT = '269687584'

我使用数据类型
bigInt
引用以下数字

DECLARE @Number Bigint = '269687584'
当我将数据类型转换为
Varbinary(4)
时,它返回
0x10131B20

但是当我计算
Varbinary
数据的长度时,它只返回3。 我不知道到底出了什么事

在SQL Server数据库中,我想编写一个查询,将
Bigint
转换为
Varbinary(4)
,但仅转换为
Varbinary(3)

以下是我尝试过的:

DECLARE @Number BIGINT = '269687584'

SELECT 
    @Number,
    CONVERT(VARBINARY(4), @Number), 
    LEN(CONVERT(VARBINARY(4), @Number))

请改用DATALENGTH:

DECLARE @Number BIGINT ='269687584'
SELECT @Number, CONVERT(VARBINARY(4), @Number), DATALENGTH(CONVERT(VARBINARY(4), @Number))

没有什么不对的。您应该使用datalength检查长度:

DECLARE @Number Bigint ='269687584'
SELECT @Number, CAST(@Number AS Varbinary(4)), DATALENGTH(CAST(@Number AS Varbinary(4)))

LEN
函数需要一个字符串,并返回删除尾随空格的长度。在这种情况下,二进制值的最后一个字节
0x10131B20
恰好是一个空格字符,并且未被计数。解决方法是使用
DATALENGTH
。旁注:初始化数字时,不应使用单引号-这表示字符串文字,因此实际上是在进行从字符串到目标数据类型的隐式转换。只需使用此选项来避免这种转换:
DECLARE@Number BIGINT=269687584
(初始化数字时不需要单引号!!)另外:毕竟您将变量定义为VARbinary-variable length-因此它只需使用实际需要的字节数来存储值-在本例中为3字节。但这没什么错!只需将
VARBINARY(4)
值转换回
BIGINT
-您将得到与开始时相同的结果-不会丢失任何数据或信息。。。。。