【问题标题】:A 4-byte Unsigned Int for Sql Server 2008?用于 Sql Server 2008 的 4 字节无符号整数?
【发布时间】:2010-04-25 23:20:11
【问题描述】:

我知道在 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)如何使用 6 个字节的空间?一个 varbinary(4)?当然。但是二进制(4)?
  • 顺便说一句,这里的实际问题是:如何在四个字节的空间中存储 2^32 个正值,或者只是如何存储 2^32 个正值?

标签: sql-server types unsigned


【解决方案1】:

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

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

【讨论】:

  • 谢谢 - binary(4) 很容易使用。现在我希望我有一个按位或聚合函数。
猜你喜欢
  • 2010-12-03
  • 2011-11-08
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2014-03-27
  • 2011-12-11
  • 2012-04-15
相关资源
最近更新 更多