值Decimal(4,0)需要5个字节才能存储在SQL Server中.这是根据文档说明所有十进制和数字类型精度1-9需要5个字节.该DATALENGTH功能也确认:
select DATALENGTH(convert(Decimal(4,0),256)) result
result
-----------
5
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
但是,当我转换为binary(5)然后返回decimal(4,0)它时截断数据.
DECLARE @myval decimal (4, 0);
SET @myval = 257;
SELECT CONVERT(decimal(4,0), CONVERT(varbinary(5), @myval)) result
result
---------------------------------------
1
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
该号码的最后一个字节被删除.但是,如果我转换为二进制(6)或更多...我得到正确的结果:
DECLARE @myval decimal (4, 0);
SET @myval = 257;
SELECT CONVERT(decimal(4,0), CONVERT(binary(6), @myval)) result
result
---------------------------------------
257
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
怎么了?如果我需要存储十进制值的二进制表示,我怎么知道需要多少字节?具体来说,确定将十进制(p,s)转换为二进制(x)所需的最小字节数x的通用公式是什么?
我需要将一些二进制数据封送到服务代理消息中,因此我需要将各种类型的数据转换为二进制字符串.是否有更健壮的方法来存储二进制值,而不是使用强制转换?
文档指出它使用 5 个字节的存储空间。它没有说明使用 CAST 或 CONVERT 将其转换为 varbinary(N) 时需要 5 个字节。事实上,文档警告您不要将数字类型转换为二进制类型或从二进制类型转换为数字类型,并带有以下注释:
不要尝试构造二进制值,然后将其转换为数值数据类型类别的数据类型。SQL Server 不保证十进制或数值数据类型转换为二进制的结果在 SQL Server 版本之间相同。
我怀疑将数字转换为 varbinary 时,除了数据位之外,还包括精度和小数位数信息。当存储在表中时,此信息由模式定义,因此不需要存储每个值的精度和小数位数,只需存储数据位。
| 归档时间: |
|
| 查看次数: |
3688 次 |
| 最近记录: |