为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

6 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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个字节的存储空间。



查看完整回答
反对 回复 2019-01-07
?
UYOU

TA贡献1878条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-01-07
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-01-07
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-01-07
  • 6 回答
  • 0 关注
  • 971 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信