1

我知道在 SO 上有多个关于此的问题,但我还没有找到“是的,这就是如何......”的明确答案

所以又来了:在 SQL Server 中将无符号整数值(32 位值或 32 位位图)存储到 4 字节字段中的可能方法是什么?

以下是我看到的想法:

1) 对所有值使用 -1*2^31 偏移量

  • 缺点:需要在读/写/聚合之前对值进行数学运算。

2) 使用 4 个 tinyint 字段

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

3) 使用二进制(4)

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

1 回答 1

2

IMO,您有正确的答案,将 2^32 个正值存储在 4 个字节中:要么是一个标准int,然后你做数学运算,要么与binary(4)你所说的相反,它只会消耗 4 个字节的空间。(只会varbinary产生额外的 2 个字节的存储空间)。一系列tinyintsmallint列将是不合理的麻烦 IMO。

当然还有另一种存储 2^32 个正值的解决方案,但它需要 8 个字节:一个带有检查约束的 bigint。鉴于今天的存储和内存是多么便宜,IMO,这是最简单和最便宜的解决方案,因为您必须跳过其他解决方案的程序化箍,但显然您有理由希望在每行上节省额外的 4 个字节.

于 2010-04-25T23:38:43.543 回答