MySQLint类型的长度和范围解惑
提问
Mysql 建表过程中:
1. 字段类型int的长度代表什么?
2. 是表⽰值的最⼤宽度吗?或者是位数吗?
3. 为什么 int(1) 的时候我可以存储 100、10000、100000 呢,甚⾄可以存储 2147483647 呢?
4. 为什么 Int(1) 的时候我不能存储 4294967295 ⽽可以存储 2147483647 ?
分析
MySQL中int类型占⽤4个字节[byte(B)],1B有8个位[bit(b)],⼀个位(b)就代表⼀个0或者1,那么MySQL中int占⽤4B,对应位就是 4*8b =
32b 了,也就是说 int 表⽰的数字 个数 是: 2的32次⽅。
mysql下载32位因为字节分有符号和⽆符号两种,于是 int 有符号 的 范围就是 -2的31次⽅ 到 2的31次⽅减去1 [?1 为什么不是32次⽅?] [?2 为什么要减去1?],即 -2147483648 ~ 2147483647; int ⽆符号(unsigned) 的 范围就是 0 到 2的32次⽅减去1。
知道了 int 类型的范围后,我们再来看看长度是什么意思。 在MySQL⼿册中,字段类型的长度⽤ “M” 表⽰,表⽰最⼤显⽰宽度。 int 的 最⼤有效显⽰宽度是 255。 注意: 此处表⽰ 显⽰宽度 和 存储⼤⼩或类型及范围 ⽆关
问中问
?1 为什么不是32次⽅?
因为有⼀个位要表⽰符号
?2 为什么要减去1?
因为 32 位在⼆进制中最⼤表⽰ 32 个 1 ,所以就存在着 减去 1
解答
1. 字段类型int的长度表⽰有效宽度,配合 zerofill 的话会更容易理解。 但这个有效宽度并不是表⽰这个值的范围,也就是说可以超过这个有效宽
2. 不是表⽰这个数字的最⼤占位宽度,也不是表⽰这个数字的占位个数。⽽是表⽰默认的显⽰宽度(当 zerrofill 时)
3. int(1) 的时候可以存储 100、10000、100000,甚⾄可以存储 2147483647,是因为 int 表⽰ 数值的范围, 1表⽰有效显⽰宽度
4. Int(1) 的时候不能存储 4294967295 ⽽可以存储 2147483647,是因为 int 有 有符号 和 ⽆符号 两种表⽰⽅式,你选择的是 有符号的⽅
式。
总结
1. 数值类型的长度及范围是两码事,不能混为⼀谈
2. MySQL中数值的范围是根据位来确定的
3. 在创建表的过程中可以根据这个数值的实际范围来选择 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 等

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。