突然发现一个问题,就是sql server,设计表的时候id主键,一般默认为int类型,但我查到int类型的范围-32768~32767,而我的数据库中的数据远不止这个数量,但我发现我的表中id值已经有超过32767的数据了.而数据库还没有出现问题,难道是我理解错了还是在sql server中主键超过范围时类型会自动变化或者别的原因?谢谢
没分了,大家见谅
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个字节的存储空间。
SQLServer的int类型是4个字节,即-2^31到2^31-1,足够你用了
如果数据只能存32767条,那就没人用了
16位系统上面的int类型是2个字节D……可能LZ看的是N年前的C语言入门吧……问题现在64位都已经成主流了……
42亿是能尝试插入的次数,实际存下来的记录数可能要少一些。
int类型的存值范围应该是从-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)。