找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 789|回复: 0

mysql int 补 0

[复制链接]

35

主题

9

回帖

214

积分

中级会员

积分
214
发表于 2022-2-11 11:09:56 | 显示全部楼层 |阅读模式
本帖最后由 20000 于 2022-2-11 11:13 编辑

如果有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解释。


int(1)、int(2)...int(10)没什么区别。

  1. CREATE TABLE `user` (
  2.   `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
  3.    PRIMARY KEY (`id`)
  4. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
复制代码
我们知道在mysql中 int占4个字节,那么对于无符号的int,最大值是2^32-1 = 4294967295,将近40亿,难道用了int(1),就不能达到这个最大值吗?

  1. mysql> INSERT INTO `user` (`id`) VALUES (4294967295);
  2. Query OK, 1 row affected (0.00 sec)
复制代码

zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能

  1. CREATE TABLE `user` (
  2.   `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
  3.    PRIMARY KEY (`id`)
  4. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
复制代码

  1. mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000);
  2. Query OK, 4 rows affected (0.00 sec)
  3. Records: 4  Duplicates: 0  Warnings: 0
复制代码
  1. mysql> select * from user;
  2. +------+
  3. | id   |
  4. +------+
  5. | 0001 |
  6. | 0010 |
  7. | 0100 |
  8. | 1000 |
  9. +------+
  10. 4 rows in set (0.00 sec)
复制代码


发现 int(4) + zerofill实现了不足4位补0的现象,单单int(4)是没有用的。而且对于0001这种,底层存储的还是1,只是在展示的会补0。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|魅力松滋 ( 鄂ICP备2024076975号-1 )

GMT+8, 2025-5-6 11:48 , Processed in 0.053191 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表