过完春节该投入战斗了,上班第一天发现了一个挺有意思的知识点给大家分享一下;一直以来的的误区我们都认为了int后面的跟的数字为最大显示宽度会对后面插入的参数会有限制,其实倒不是这样的

# 困惑

最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是提mysql工单alter table xxx ADD user_id int(1)。
领导看到sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解释。
其实这不是我第一次遇到这样的问题了,其中不乏有工作5年以上的老司机。包括我经常在也看到同事也一直使用int(10),感觉用了int(1),字段的上限就被限制,真实情况肯定不是这样。

# 数据说话

我们知道在mysql中 int占4个字节,那么对于无符号的int,最大值是2^32-1 = 4294967295,将近40亿,难道用了int(1),就不能达到这个最大值吗?

CREATE TABLE `user` (  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,   PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

id字段为无符号的int(1),我来插入一个最大值看看。

可以看到成功了,说明int后面的数字,不影响int本身支持的大小,int(1)、int(2)...int(10)没什么区别。

# 零填充

一般int后面的数字,配合zerofill一起使用才有效。先看个例子:

CREATE TABLE `user` ( `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

注意int(4)后面加了个zerofill,我们先来插入4条数据。

分别插入1、10、100、1000 4条数据,然后我们来查询下:

通过数据可以发现 int(4) + zerofill实现了不足4位补0的现象,单单int(4)是没有用的。

而且对于0001这种,底层存储的还是1,只是在展示的会补0。

# 总结

int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。
zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。

 

sql语句中 int(1)与int(10)有什么区别?资深开发竟然能理解错的更多相关文章

  1. SQL语句中count(1)count(*)count(字段)用法的区别

    SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和cou ...

  2. SQL语句中count(1)count(*)count(字段)用法的区别(转)

    SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和cou ...

  3. SQL语句中order_by_、group_by_、having的用法区别

    order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字段名,可以是多个字段名. group by 从英文里理解就是分组.必须有“聚合函数”来配合才能使用 ...

  4. Sql语句中的truncate,delete,drop的区别

    相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 不同点: 1. truncate 和 delete 只删除数据不删除表的结构(定义) drop 语句 ...

  5. sql语句中 left join,right join,inner join 的区别

    看到了sql,发现好久没写sql甚是想念哈哈哈哈,好多当时学的东西都忘了,当时总结的好多的文档也怎么都找不到了..... 言归正传,找到了一张图感觉描述的还挺清晰,先贴图,再说说自己的理解. 1.LE ...

  6. SQL 语句中的in、find_in_set、like的区别

    1.in查询相当于多个or条件的叠加,例如: select * from user where user_id in (1,2,3);等效于select * from user where user_ ...

  7. sql语句中where,have,on的区别

    一.where和on的区别 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户.  在使用left jion时,on和where条件的区别如下:   1. ...

  8. SQL语句中output的用法

    在SQL语句中,output可以作为返回值来使用, 1.我们先看这个存储过程 代码: 1 set ANSI_NULLS ON  2 set QUOTED_IDENTIFIER ON  3 go  4 ...

  9. SQL语句中日期的计算方法大全

    sql语句中的日期处理一.日期處理函數1.日期增減函數 dateadd(datepart,number,dtae) datepart:是規定應向日期的哪一部分返回新值的參數.下列是sql server ...

随机推荐

  1. 使用js实现复选框的全选、取消功能

    id为all的想设置全选的那个框的id,name为checkname[]的是每个小复选框: 第一种: <script> function checkAll() { var all=docu ...

  2. 针对form表单赋值封装

    1 (function ($){ 2 $.fn.extend({ 3 exajax:function(url,opts,convert){ 4 var ajaxParam = { 5 url:url, ...

  3. 支付宝小程序中“<”号写法

    今天遇到一个小问题,记录一下 "<"号在h5页面都是可以直接显示的,但是在运行支付宝小程序时报错,找了一个解决办法 <text> {{char_lt}} 18.5 ...

  4. 深度学习(三)之LSTM写诗

    目录 数据预处理 构建数据集 模型结构 生成诗 根据上文生成诗 生成藏头诗 参考 根据前文生成诗: 机器学习业,圣贤不可求.临戎辞蜀计,忠信尽封疆.天子咨两相,建章应四方.自疑非俗态,谁复念鹪鹩. 生 ...

  5. numpy教程03---ndarray的运算

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  6. docker下将容器按照端口号分配

    问题情境:现在有一个服务器主机,安装了docker,想给成员分配各自的容器,但不想成员通过宿主机进入容器.那么成员如何直接访问容器呢? 成员可以通过ip加端口号访问 因此,需要生成一个容器,将容器的2 ...

  7. Linux磁盘分区fdisk命令操作(简洁版)

    实例(环境为: CentOS Linux release 7.2.1511 (Core), 3.10.0-327.el7.x86_64) 选择要具体操作的第二块磁盘(linux下一切是文件形式对应): ...

  8. 启动分区查找可以通过 fdisk -l命令

    这里有两个硬盘,一个硬盘有两个分区,sda1 的boot列 带*表示是启动分区,否则为空

  9. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

  10. nacos集群模式搭建踩坑记录

    首先数据库使用的本地的mysql 1.看日志提示no set datasource,使用虚拟机ping本地后发现无法ping通,原因是本地没有关闭防火墙. 2.看日志提示不允许建立数据库连接,原因是r ...