2010-04-25 39 views
1

我知道有关于这个问题的多个问题,但我还没有找到明确的答案,“是的,这里是如何...”Sql Server 2008的4字节Unsigned Int?

所以这里又是:什么是可能的方式来存储无符号整数值(32位值或32位位图)转换为SQL Server中的4字节字段?

这里有想法我已经看到:

1)使用-1 * 2^31的所有值

  • 劣势抵消:需要读取/写入之前的值进行数学/汇总。

2)使用4 TINYINT字段

  • 缺点:需要连接值来执行任何操作

3)使用二进制(4)

  • 缺点:实际上使用4 + 2字节的空间(编辑:varbinary(4)使用4 + 2,二进制(4)仅使用4)
  • 需要SqlBinary工作或转换为/从其他类型的
+1

二进制文件(4)如何使用6个字节的空间?一个varbinary(4)?当然。但是一个二进制(4)? – Thomas 2010-04-25 23:27:56

+0

顺便说一句,这里的实际问题是:如何在4个字节的空间中存储2^32个正值,或者它如何存储2^32个正值? – Thomas 2010-04-25 23:29:57

回答

2

IMO,你有正确的答案,在4个字节存储2^32个正值:一个标准int,你做数学题或这与你所说的相反,只会消耗4个字节的空间。 (只有varbinary会产生额外的2个字节的存储空间)。 IMO的一系列tinyintsmallint列将是不合理繁琐的。

当然,还有另一种存储2^32正值的解决方案,但它需要8个字节:带检查约束的bigint。考虑到今天廉价的存储和内存,国际海事组织,这是最简单和最便宜的解决方案,因为你必须通过其他解决方案跳过这些程序化的环节,但显然你有一个理由希望在每一行中保存额外的4字节。

+0

谢谢 - 二进制(4)很容易处理。现在我希望我有一个按位或聚合函数。 – 2010-04-26 16:27:16