mysql中的int(5)到底有是多长
int(5)到底有是多长
在设计 mysql 表字段时,int(5) 表示是该字段长度为 5 吗?
如果你觉得是,那请你继续往下看,相信你会有新的收获的。
先来看一个实际例子
我们创建一个新表,表中只有一个主键 id 和一个 length 字段,其中 length 字段设置为 int(5) 。
#新建test表
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`length` int(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
是不是 length 字段只能存储长度不超过 5 的数字呢,我们来插入一条数据试试。
我们插入一条较大的数据 123456789 ,这个数据一共有 9 位,看能否正常插入。
#插入一条大数据
insert into test (length) values (123456789);
结果证明 int(5) 能插入长度大于 5 的数据,所以现在可以肯定的是 int(5) 并不是代表数据的宽度。
#查看插入数据
mysql> select * from test;
+------------+-----------+
| id | length |
+------------+-----------+
| 1 | 123456789 |
+------------+-----------+
在 mysql 中 int 字段长度其实是固定的,就是 4 个字节,不管你 int(11) 还是 int(5) 字段长度就是固定的 4 个字节。
int(5) 其实是和另一个属性 zerofill 配合使用的,表示如果该字段值的宽度小于 5 时,会自动在前面补 0 ,如果宽度大于等于 5 ,那就不需要补 0 。
#int(5) length 字段添加了 zerofill 属性
mysql> select * from test;
+----+--------+
| id | length |
+----+--------+
| 1 | 00888 |
| 2 | 00012 |
| 3 | 12345 |
| 4 | 123456 |
+----+--------+
注意前提是给该字段添加了 zerofill 属性,不然 int(5) 不起作用。
#int(5) length 字段没有 zerofill 属性
mysql> select * from test;
+----+--------+
| id | length |
+----+--------+
| 1 | 888 |
| 2 | 12 |
| 3 | 12345 |
| 4 | 123456 |
+----+--------+
要想对整形字段设置长度,应该是选择 tinyint、smallint、mediumint、int、bigint 这几个类型,这几个整数类型才代表了固定的长度,具体长度请看下面这个表格。
注意如果要存储带符号的整形数,是不支持 zerofill 属性的,会自动转换为 0,在一些涉及递减的业务中需要注意考虑一下。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341