博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
int(1)和int(11)是否有区别?
阅读量:7244 次
发布时间:2019-06-29

本文共 2190 字,大约阅读时间需要 7 分钟。

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

所以INT(1)和INT(11)默认是没有任何区别的!

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(1) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into t1 select 123,1234;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from t1;

+------+------+
| id | uid |
+------+------+
| 123 | 1234 |
+------+------+
1 row in set (0.05 sec)
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。如果设置了ZEROFILL扩展属性试,默认就有了无符号属性(UNSIGNED)

所以INT(1)与INT(11)后的括号中的字符表示显示宽度,整数列的显示宽度与MySQL需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,INT类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。其实当我们在选择使用INT的类型的时候,不论是INT(1)还是INT(11),它在数据库里面存储的都是4个字节的长度。

mysql> desc t2;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id | int(1) unsigned zerofill | YES | | NULL | |
| uid | int(11) unsigned zerofill | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into t2 select 123456,123456789;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> insert into t2 select 123456,1234567899;

Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from t2;

+--------+-------------+
| id | uid |
+--------+-------------+
| 123456 | 00123456789 |
| 123456 | 01234567899 |
+--------+-------------+
2 rows in set (0.00 sec)

总结:
INT(M) ZEROFILL,加上ZEROFILL后M才表现出不同,比如 INT(3) ZEROFILL,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果INT(3)和INT(10)不加ZEROFILL,则它们没有什么区别.M不是用来限制INT列内保存值的范围的.int(M)的最大值和最小值与UNSIGNED有关。

转载于:https://www.cnblogs.com/liang545621/p/9443168.html

你可能感兴趣的文章
Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五)
查看>>
centos7搭建FTP服务器
查看>>
HDU-4033 Fruit Ninja 几何 二分搜索
查看>>
POJ-1057 FILE MAPPING 恶心模拟
查看>>
SpringMVC 之数据转换和国际化
查看>>
(Struts)ActionForm类及表单数据验证
查看>>
【php】phpExcel使用教程,如何导出excel表格
查看>>
PHP获取二维数组中某一列的值集合
查看>>
draft数据保存
查看>>
python自动化测试(2)-自动化基本技术原理
查看>>
iOS之网络数据下载和JSON解析
查看>>
ios图片剪切
查看>>
点滴积累(持续更新)
查看>>
Linux添加用户user到用户组group
查看>>
Github上传自己的工程
查看>>
mac svn 终端操作命令
查看>>
为什么没有选择sipml5
查看>>
如何利用配置方式配置SMTP发送邮件
查看>>
GYM 101522B. Bacteria Experiment
查看>>
剑指Offer - 平衡二叉树
查看>>