这是我参加8月更文应战的第3天,活动概略检查:8月更文应战
困惑
最近遇到个问题,有个表的要加个user_id字段,user_id字段或许很大,所以我提mysql工单alter table xxx ADD user_id int(1)
。领导看到我的smysql索引ql工单,所以说:这int(1)
怕是不够用吧,接下来是一通解说。
其实这不是我第一次遇到这样的mysql句子问题了,其间不乏有作业5年以上的老司机。包含我经常在也看到伙伴也一直运用int(10),感觉用了int(1),字段的上限就被束缚,真实情况必定不mysql数据库命令大全是这样。
数据说话
咱们知道在mysql中 int占4个字节,那么关于无mysql句子符号的int,最大值是2^32-1 = 4294967295,将近40亿,莫非用了intMySQL(1),就不能抵达mysql密码忘记了怎么办这个最大值吗?
CREATE TABLE `umysql装置ser` (
`id` int(1) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTOmysql装置_INCREMENT=1 DEFmysql装置装备教程AULT CHARSET=utf8mb4;
id字段为无符号的int(1),我来刺进一个最大值看看。
mysql> INSERT INTO `user` (`id`) VALUES (mysql数据库命令大全4294967295);
Query OK, 1 row affected (0.00 sec)
可以看到成功了,说明int后边的数字,不影响int自身支撑的大小,int(1)、int(2)…int(10)没什么差异。
零填充
一般int后边的数字,合作zerofill一同运用才有用。先看个比方:
CREATE TABLE `user` (
`id` inmysql装置装备教程t(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHmysql索引ARSET=utf8mb4;
留意int(4)后边加了个zerofill,咱们先来mysql数据库命令大全刺进4条数据。
mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
别离刺进1、10、100、mysql装置1000 4条数据,然后咱们来查询下:
mysmysql密码忘记了怎么办ql> select * from user;
+------+
| id |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)
经过mysql装置装备教程数据可以发现 int(4) + zerofillmysql句子完成了不足4位补0的现象,单单int(4)是没有用的。
而且关于0001这种,底层存储的仍是1,只是在展示的会补0。
总MySQL结
int后边的数字不能标明字段的长度,int(num)一般加上zerofill,才有效果。zerofill的作mysql索引用一般可以用在一些编号相关的数字中,比方学生的编号 001 002 … 999这种,假如mysql没有零填充的功能,可是你又要格式化mysql优化输出等长的数字编号时,那么你只mysql增修改查句子能mysql数据库命令大全自己处理了。