昨天有个读者问了我这样一个问题在mysql中建表的时候,我设置一个字段为int类型,长度为1,但是我发现这个字段却可以存储任意长度的数字,这是什么情况?这个问题在我刚接触数据库的时候也遇到过,我觉得有必要写一篇文章来解释一下。

01 是计算机最基本的存储单位。也是 CPU 采用的最基本的计算单位,也就是二进制。int 类型占 4 个字节,一个字节是 8 位,也就是说 int 类型在计算机底层是由 3201 表示,转化为十进制就是 232 次方,那么存储范围就是 0~2^32 ,如果带符号位的话就是 -2^31 ~ 2^31-1

在使用SQLyog工具建表时,除了常见的几个属性Field NameDataTypeLenDefaultPK?Not Null?Auto Incr?Comment之外,还有两个不常用的Unsigned?Zerofill?,这两个属性到底有什么用呢?

Unsigned无符号的,意思就是只能为正数,不能为负数。

Zerofill零填充,意思就是达不到指定长度后,前面用 0 来填充。

现在再来看看这个int(1)中的1究竟有什么奥秘。这个1跟这个字段能存的数据范围没关系,它也不是限制这个字段的数据长度的。这个字段存储的数据范围是由int来限制的。

这个1只是规定了数据的宽度,如果你选择了Zerofill属性,就能更好地理解这个1了,如果我们写入的数据达不到这个长度,那么就会在数据前面补0来达到这个长度。比如我们将int(1)改成int(3),我们再输入1,实际上显示的是001。所以不管你将 int 类型的长度设为多少并不会影响数据的存储范围。

mysql对于整型的数据类型,不仅给我们提供了int,还提供了tinyintsmallintmediumintbigint。这些类型存储的数据范围都是不一样的,具体如下表:

类型 字节 最小值 最大值
(带符号的/无符号的) (带符号的/无符号的)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

看到这儿,应该已经清楚int(1)的真正含义了。根据实际需求选择合适的数据类型来存储就可以了。

再来聊一聊一个常见的面试题:int类型做自增主键有没有可能存储完?肯定是有的,都有数据范围了,主键一直增长肯定有可能会达到这个范围。很多小伙伴是不是心中飘过一万匹草泥马,忙着修改数据库去了。这其实大可不必担心,这个数字大概是42亿。如果数据量够够够够大,你选择bigint做为自增主键肯定没啥问题。这个数字我已经读不出来了,交给评论区的你们来读!

聊聊mysql中的int(1)的更多相关文章

  1. mysql中的int和tinyint、varchar和char、DateTime和TimeStamp区别

    一.int和tinyint的区别 大小: tinyint在mysql中占用1个字节 即: 1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方:11111111 = 256 在 ...

  2. 「MYSQL」MYSQL中的int(11)到底代表什么意思?

    一.前言 在工作中经常要与mysql打交道,但是对mysql的各个字段类型一直都是一知半解,因此写本文总结记录一番. 二.简介 对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用 ...

  3. 简单谈谈MySQL中的int(m)

    转载地址:https://www.jb51.net/article/93760.htm 设置int型的时候,需要设置int(M),以前知道这个M最大是255,但是到底应该设置多少并没有在意.注意zer ...

  4. MYSQL中的int(11)到底代表什么意思?

    对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的int(11)代表什么意思,很长时间以来我都以为这代表着限制int的长度为11位,直到有天看到篇文章才明白,11代表的并不是长 ...

  5. mysql中为int设置长度究竟是什么意思

    根据个人的实验并结合资料:1.长度跟可以使用的值的范围无关,值的范围仅跟类型对应的存储字节数和是否unsigned有关:2.长度指的是显示宽度,比如,指定3位int,那么id为3和id为300的值,在 ...

  6. MYSQL 中的 int(11) 到底代表什么意思?

    各 INT 类型无符号最大值用单位表示: INT 类型 无符号最大值用单位表示 TINYINT 255 SMALLINT 65535 MEDIUMINT 1677 万 INT 42 亿 BIGINT ...

  7. Mysql中int(1)的误解及说明

    在mysql中使用int相关的数据类型时, 如果不太了解其存储方式, 会产生一些误用的情况. 如: 只保存0-9之间的数字, 可能会直接用int(1). 习惯性的以为int(1)就相当于varchar ...

  8. Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

    刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...

  9. 抛砖系列之-MySQL中的数据类型JSON

    今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...

随机推荐

  1. 《python编程从入门到实践》2.3字符串

    书籍<python编程从入门到实践> 2.3字符串 知识模块 print()函数,函数名称突出为蓝色,输出括号内的变量或者字符创. 变量名的命名:尽量小写字母加下划线并且具有良好的描述性, ...

  2. 【mysql】- 锁篇(下)

    InnoDB存储引擎中的锁 表级锁 表级别的S锁.X锁 在对某个表执行SELECT.INSERT.DELETE.UPDATE语句时,InnoDB存储引擎是不会为这个表添加表级别的S锁或者X锁的 表级别 ...

  3. Java中的大数值使用

    在Java中,偶尔会遇到超大数值,超出了已有的int,double,float等等你已知的整数.浮点数范围,那么可以使用java.math包中的两个类:BigInteger和BigDecimal. 这 ...

  4. 轻量级分布式延时任务处理组件easyTask-L-入门篇

    今天给大家介绍一款新武器.我自研的一个java组件easyTask-L.这个是做啥的呢?我之前研发了一款单机版本的easyTask,这次是要介绍另外一款easyTask-L.区别就是后者支持分布式环境 ...

  5. JMS资源文件下载列表

    网关程序(Gateway) https://files.cnblogs.com/files/IWings/Gateway.zip 网关裁判程序(GatewayReferee) https://file ...

  6. DC-1靶机实战和分析

    前言 我们都知道,对靶机的渗透,可以宽阔自己的解题思路,练习并熟悉相关操作命令,提高自己的能力.下面我就对Vulnhub的DC-1靶机进行渗透,靶机设置了5个flag,咱们依次找到它.并通过图文形式讲 ...

  7. pycharm控制台输出的日志全是红色的字体?

    问题:logging在pycharm控制台输出的日志的字体全是红色的,怎么办? 图片描述: 解决办法:设置 -> 搜索“Console” ->  结果:改完立马生效

  8. vue学习(十八)使用自定义指令 为字体渲染颜色

    <div id="app"> //v-color 是自定义的 <input type="text" class="form-cont ...

  9. Redis 和 memcache 简单比较

    1.Redis不仅仅支持简单的key-value类型的数据,同时还提供list.set.zset.hash等数据结构的存储. 2.Redis支持master-slave(主--从)模式应用. 3.Re ...

  10. Jmeter 中 CSV 如何参数化测试数据并实现自动断言

    当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化.此种情况下,很多测试工程师 ...