Sql 为什么不是';0-4294967294没有数字数据类型

Sql 为什么不是';0-4294967294没有数字数据类型,sql,sql-server,Sql,Sql Server,这可能是一个愚蠢的问题,如果是这样,我道歉 我最近读了一篇关于将您的标识设置为标识(-2147483647,1),以便在使用INT数据类型时获得所有40亿行的文章,这让我感到非常奇怪 我很好奇,为什么没有一个数据类型的大小与INT相同,但可以容纳0-4294967294行。这是有符号长整数和无符号长整数之间的区别。无符号长整数将存储00000000000000000000和11111111111111111111111111之间的值,或者0到4294967295之间的值,这是您的直觉告诉它应该是

这可能是一个愚蠢的问题,如果是这样,我道歉

我最近读了一篇关于将您的标识设置为标识(-2147483647,1),以便在使用INT数据类型时获得所有40亿行的文章,这让我感到非常奇怪


我很好奇,为什么没有一个数据类型的大小与INT相同,但可以容纳0-4294967294行。

这是有符号长整数和无符号长整数之间的区别。无符号长整数将存储00000000000000000000和11111111111111111111111111之间的值,或者0到4294967295之间的值,这是您的直觉告诉它应该是的

相反,这是一个有符号长整数,它使用最左边的位作为符号。0表示正,1表示负。因此,您存储的值介于1000000000000000000和01111111111111111111111111111之间,或者-2147483647到2147483647之间

这里有一些关于无符号long如何存储负数的细微差别(使用2的恭维)。你可以在这里了解更多


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

这个问题似乎离题了,因为它是重复的,我无法将其标记为b/c这两个问题在不同的网站上