首页 新闻 会员 周边 捐助

关于id自动增长超范围的问题

0
悬赏园豆:20 [已解决问题] 解决于 2010-03-09 14:33

突然发现一个问题,就是sql server,设计表的时候id主键,一般默认为int类型,但我查到int类型的范围-32768~32767,而我的数据库中的数据远不止这个数量,但我发现我的表中id值已经有超过32767的数据了.而数据库还没有出现问题,难道是我理解错了还是在sql server中主键超过范围时类型会自动变化或者别的原因?谢谢

没分了,大家见谅

老唐的主页 老唐 | 初学一级 | 园豆:0
提问于:2010-02-27 10:30
< >
分享
最佳答案
0

sql server(2000~)中int类型的取值范围不是你说的-32768~32768,是数据类型存储从-2的31次方 (-2 ,147 ,483 ,648) 到2的31次方-1 (2 ,147 ,483,647) 之间的所有正负整数。每个int类型的数据按4 个字节存储,其中1 位表示整数值的正负号,其它31 位表示整数值的长度和大小。

而SMALLINT 数据类型存储从-2的15次方( -32, 768) 到2的15次方-1( 32 ,767 )之间的所有正负整数。每个SMALLINT 类型的数据占用2 个字节的存储空间,其中1 位表示整数值的正负号,其它15 位表示整数值的长度和大小。


TINYINT数据类型存储从0 到255 之间的所有正整数。每个TINYINT类型的数据占用1 个字节的存储空间。

BIGINT 数据类型存储从-2^63 (-9 ,223, 372, 036, 854, 775, 807) 到2^63-1( 9, 223, 372, 036 ,854 ,775, 807) 之间的所有正负整数。每个BIGINT 类型的数据占用8个字节的存储空间。



收获园豆:20
西越泽 | 专家六级 |园豆:10775 | 2010-02-27 10:49
说的很详细,楼主可以参考
langford | 园豆:710 (小虾三级) | 2010-02-27 13:27
其他回答(5)
0

SQLServer的int类型是4个字节,即-2^31到2^31-1,足够你用了

一味 | 园豆:150 (初学一级) | 2010-02-27 10:46
0

如果数据只能存32767条,那就没人用了

回忆过去 | 园豆:329 (菜鸟二级) | 2010-02-27 13:01
0

16位系统上面的int类型是2个字节D……可能LZ看的是N年前的C语言入门吧……问题现在64位都已经成主流了……

lazylu | 园豆:210 (菜鸟二级) | 2010-02-27 13:35
0

42亿是能尝试插入的次数,实际存下来的记录数可能要少一些。

John Rambo | 园豆:210 (菜鸟二级) | 2010-02-27 14:06
0

int类型的存值范围应该是从-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)。

风影极光 | 园豆:1573 (小虾三级) | 2010-02-27 23:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册