sql - 为什么没有 0 - 4,294,967,294 的数字数据类型

标签 sql sql-server

这可能是一个愚蠢的问题,如果是这样,我深表歉意。

我最近读了一篇关于将身份设置为 IDENTITY(-2147483647,1) 的文章,以便在使用 INT 数据类型时获得全部 40 亿行,这对我来说感觉很奇怪。

我很好奇为什么没有一个与 INT 大小相同但保存 0 - 4,294,967,294 行的数据类型。

最佳答案

这是有符号长整型和无符号长整型之间的区别。无符号长整数将存储 00000000 00000000 00000000 00000000 和 11111111 11111111 11111111 11111111 或 0 到 4294967295 之间的值,这就是你的直觉告诉它应该的值。

相反,这是一个带符号的长整型,它使用最左边的位作为符号。 0 为正,1 为负。因此,您存储的值介于 10000000 00000000 00000000 00000000 和 01111111 11111111 11111111 11111111 或 -2147483647 到 2147483647 之间。

这里关于无符号长整数如何存储负数(使用 2 的补码)有一些细微差别。您可以在这里阅读更多相关信息http://kias.dyndns.org/comath/13.html

至于为什么微软决定使用有符号整数而不是无符号整数,你可以在问题的评论中查看@alroc的链接,尽管它并不是很有启发性,因为它基本上可以归结为“这很复杂,我们很酷”它与它,所以就是这样。振作起来。”

关于sql - 为什么没有 0 - 4,294,967,294 的数字数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636734/

相关文章:

MySQL LEFT Join 具有多种可能性和 Inner Join

php - 具有缺失数据的时间范围内的平均值

c# - 将 Unicode 字符串从 C# 发送到 SQL Server 2008 数据库

sql-server - 比较 SQL 中列的 NULL 或值的有效方法

c# - 创建 Windows 桌面应用程序的可执行 exe 文件

sql - 查询此数据的更有效方法?

sql - 无法识别指定的设置 'INSTALL'。错误代码 0x84B40003

sql - 如何为每个键值选择具有最新时间戳的行?

sql - 如何使用用户名和密码打开数据库连接

asp.net - 在 SQL Server 中将日期转换为刻度