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

我特别想着unsigned int

这里是一个实际的例子:当你的身份列最大化时,你做什么? 有可能要么BigInt (8字节存储而不是4)或重构应用程序以支持负整数,甚至创build自己的规则, 如此答案中所示 ; 这些选项都不是最佳select。

UInt将是一个理想的解决scheme,但SQL Server不提供它(MySQL所在的地方)。

据我所知,无符号数据types不是SQL标准的一部分(SQL-2003),但对我来说仍然是一种浪费。

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

如果我不得不猜测,我会说他们试图避免types的扩散。 一般来说,没有任何一个无符号整数可以做一个有符号的整数不能做的事情。 至于你需要一个2147483648和4294967296之间的数字,你可能应该去一个8字节的整数,因为这个数字最终也会超过4294967296。

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

 Identity(-2147483648, 1) 

我在Microsoft Connect上发现了一个类似的问题。

Jim Hogg(程序经理)的回复有一些专业和build议用于添加unsigned int的。 主要的限制是实现隐式types转换的规则成为一个噩梦得到正确的。

该请求被closures为“不会修复”。