mysql 中 int(3), int(6) 存储范围都一样,那指定长度的意义是什么?

2 个回答

  • ketty
    不必太张扬,是花自然香。
    1、长度跟可以使用的值的范围无关,值的范围仅跟类型对应的存储字节数和是否unsigned有关; 2、长度指的是显示宽度,比如,指定3位int,那么id为3和id为300的值,在显示的时候怎么对齐呢?按照手册的说法,是默认用“空格”在左边填充。比如下述表格 ```sql CREATE TABLE `inttest` ( `id` int(3) unsigned NOT NULL AUTO_INCREMENT, `value` varchar(2) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 ``` 现在分别插入id长度为2,3,4,5位的数据,执行查询以后得到显示如下: ```sql MariaDB [mytest]> select * from inttest; +-------+-------+ | id | value | +-------+-------+ | 13 | a | | 111 | b | | 1000 | c | | 10000 | d | +-------+-------+ 4 rows in set (0.00 sec) ``` 如果我们改成ZEROFILL,再次查询的结果如下: ```sql MariaDB [mytest]> select * from inttest; +-------+-------+ | id | value | +-------+-------+ | 013 | a | | 111 | b | | 1000 | c | | 10000 | d | +-------+-------+ 4 rows in set (0.00 sec) ```
    发布于 2022-03-08 03:47 •IP属地 云南
    举报
    评论
    收藏

  • 无邪
    鸟随鸾凤飞腾远,人伴贤良品自高。
    查下手册,解释是这样的: MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。 也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。 结论: 无论是unsigned int(3)或 unsiend int(6),存储的都是4字节无符号整数, 也就是0~2^32。
    发布于 2022-03-07 04:14 •IP属地 辽宁
    举报
    评论
    收藏