我专门在考虑未签名int
。
这是一个实际的示例:当您的身份列超出限制时该怎么办?可以BigInt
(存储8个字节而不是4个字节)或重构应用程序以支持负整数,甚至可以按照此答案创建自己的规则;这些选项都不是最佳选择。
UInt
会是一个理想的解决方案,但SQL Server不提供(MySQL提供)。
我知道无符号数据类型不是SQL标准(SQL-2003)的一部分,但对我来说似乎仍然很浪费。
不包括这些内容的原因是什么(在SQL Server或标准中)?
我专门在考虑未签名int
。
这是一个实际的示例:当您的身份列超出限制时该怎么办?可以BigInt
(存储8个字节而不是4个字节)或重构应用程序以支持负整数,甚至可以按照此答案创建自己的规则;这些选项都不是最佳选择。
UInt
会是一个理想的解决方案,但SQL Server不提供(MySQL提供)。
我知道无符号数据类型不是SQL标准(SQL-2003)的一部分,但对我来说似乎仍然很浪费。
不包括这些内容的原因是什么(在SQL Server或标准中)?
Answers:
如果我不得不猜测,我会说他们正在努力避免类型的扩散。一般来说,无符号整数不能做任何有符号整数不能做的事情。对于需要2147483648和4294967296之间的数字的情况,您可能应该使用8字节整数,因为该数字最终还会超过4294967296。
ORDER BY ABS(Id)
),尤其是如果列是集群主键时。例如,使用32位Unix时间戳通常是一种方便的方法,可以将标准SQL日期时间减少4个字节。
我在Microsoft Office Dev Center上找到了类似的问题。
Jim Hogg(程序经理)的答复包含添加未签名的int的优点和缺点。主要缺点是实现隐式类型转换的规则成为正确的噩梦。
该请求已关闭,显示为“无法解决”。
他们不支持SIGNED和UNSIGNED关键字,因为它们不是标准的。在SQL标准中,所有数字类型都是带符号的。
MySQL扩展名UNSIGNED(和SIGNED,这是默认设置),可用于在相同数量的字节中存储较高的无符号数,并禁止使用负数。