为什么SQL Server不支持无符号数据类型?

Rom*_*ein 75 sql sql-server sqldatatypes unsigned-integer

我特意想的是未签名int.

这是一个实际的例子:当你的身份栏最大化时你会怎么做?它可以去BigInt(8字节存储而不是4字节)或重构应用程序以支持负整数,甚至可以创建自己的规则,如本答案所示 ; 这两种选择都不是最佳选择.

UInt 将是一个理想的解决方案,但SQL Server不提供它(MySQL在哪里).

我知道无符号数据类型不是SQL标准(SQL-2003)的一部分,但对我来说似乎仍然是一种浪费.

不包括这些(在SQL Server或标准中)的原因是什么?

Jef*_*nby 59

如果我不得不猜测,我会说他们正试图避免类型的扩散.一般来说,无符号整数无法执行有符号整数无法执行的任何操作.对于需要2147483648和4294967296之间的数字的情况,您可能应该转到8字节整数,因为该数字最终也将超过4294967296.

  • 如果"类型的扩散"可以节省一些空间/金钱,为什么你猜这可能是邪恶的. (7认同)
  • 我想这是我们能够得到这个问题答案的最接近的答案.谢谢. (2认同)

CFr*_*tas 45

为此,您可以使用-2,147,483,648作为种子值.

Identity(-2147483648, 1)
Run Code Online (Sandbox Code Playgroud)

  • 哈,我非常喜欢这个答案。我不确定我是否会实现它,但它确实解决了一半 id 未使用的问题。 (6认同)

Ant*_*y K 40

在Microsoft Connect上发现了类似的问题.

Jim Hogg(项目经理)的回复有一些关于添加unsigned int的专家和骗局.主要的骗局是实现隐式类型转换的规则成为一个正确的噩梦.

该请求已被关闭为"无法修复".