MySQL中Int(3)与Int(6)的数值范围相同吗?

网友投稿 714 2023-04-01

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

MySQL中Int(3)与Int(6)的数值范围相同吗?

提问:

mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?

回答:

不同,int(3)最多显示3位无符号整体,int(6)最多显示6位无符号数。

如果你的答案和上面的一致,恭喜你和我犯了一样的错误。

真实情况:

int类型整数占4个字节,有符号的范围为:-2^31 ~ 2^31-1,无符号整数范围为:0 ~ 2^32-1,既然都是无符号整数,那么存储范围是一样的,int(6)只是在数字不够6位时用0补全,如果超过6位,则不需要补全。

我们建立下面这张表:

drop table if exists test; CREATE TABLE `test` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `a` int(11) NOT NULL,   `b` int(11) unsigned zerofill NOT NULL,   `c` int(5) DEFAULT NULL,   `d` int(5) unsigned zerofill NOT NULL,   `e` int(15) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入一些数据后,用cmd命令行查看:

mysql> select * from test; +----+------------+-------------+------------+------------+------------+ | id | a          | b           | c          | d          | e          | +----+------------+-------------+------------+------------+------------+ |  1 |          1 | 00000000001 |          1 |      00001 |          1 | |  2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 | +----+------------+-------------+------------+------------+------------+

发现,无论是int(3), int(6), 都可以显示6位以上的整数。但是,当数字不足3位或6位时,前面会用0补齐。

注意:如果你是用类似navicat这种工具看,不会补充0,可能做了处理,需要用mysql cmd命令行才能看到这种效果。

查下手册,解释是这样的:

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。

结论:

无论是unsigned int(3)或 unsiend int(6),存储的都是4字节无符号整数, 也就是0~2^32。

上一篇:信息技术服务三项国标出台 破解IT运维瓶颈
下一篇:告警根因分析法(故障根因分析)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~