有没有人知道我可以使用4个字节而不是8个字节和bigint来保存无符号整数(0到4294967295)的任何工作?
我知道我们可以创建用户定义的数据类型并对它们创建约束以不允许负值,但仍然不允许我输入超过2147483647的值。我只想使用4个字节但能够保存更大的整数值比2147483647但小于4294967295。
答案 0 :(得分:3)
您没有可用的未签名类型,因此您可以使用UDT创建一个,或选择更大的数据类型。如果你在UDT中这样做,你将再次超过4个字节。
极端的黑客攻击是在您阅读它之后自动将偏移量应用于您的存储值,添加-2 ^ 31但是这是一种真正的hacky方式来解决它并让任何人查看代码等混淆,而不是提到错过/错过的事情的可能性。我根本不推荐黑客攻击。
答案 1 :(得分:2)
使用二进制(4)。如果需要,请将其包装在UDT中。
答案 2 :(得分:0)
此解决方案可能会有些混乱,但可以用于您的目的。以整数形式存储大于2 ^ 31-1的值会导致溢出并显示为负数。您仍然可以将值存储为整数,并在代码中重新解释它们。
答案 3 :(得分:0)
如RBarry所述,请尝试使用:
declare @bi binary(4) = cast(2147483648 as bigint)
declare @i int = cast(@bi as binary(4))
select @i
declare @bi2 bigint = cast(cast(@i as binary(4)) as bigint)
select @bi2