Sql Server 2008的4字节无符号Int?

时间:2010-04-25 23:20:11

标签: sql-server types unsigned

据我所知,有关SO的问题有很多问题,但我还没有找到一个肯定的回答:“是的,这是怎样的......”

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

以下是我见过的想法:

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

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

2)使用4个tinyint字段

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

3)使用二进制(4)

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

1 个答案:

答案 0 :(得分:2)

IMO,你有4个字节存储2 ^ 32个正值的正确答案:标准int和你做数学或binary(4),与你所说的相反,只消耗4个字节的空间。 (仅varbinary将产生额外的2个字节的存储空间)。一系列tinyintsmallint列将是毫无道理的IMO。

当然还有另一种存储2 ^ 32正值的解决方案,但需要8个字节:带检查约束的bigint。考虑到今天的存储和内存有多便宜,IMO,这是最简单和最便宜的解决方案,考虑到程序化的箍,你将不得不跳过其他解决方案,但显然你有理由想要在每一行保存额外的4个字节