聊聊mysql中的int(1)
昨天有个读者问了我这样一个问题在mysql中建表的时候,我设置一个字段为int类型,长度为1,但是我发现这个字段却可以存储任意长度的数字,这是什么情况?这个问题在我刚接触数据库的时候也遇到过,我觉得有必要写一篇文章来解释一下。
0
和 1
是计算机最基本的存储单位。也是 CPU
采用的最基本的计算单位,也就是二进制。int
类型占 4
个字节,一个字节是 8
位,也就是说 int
类型在计算机底层是由 32
个 0
跟 1
表示,转化为十进制就是 2
的 32
次方,那么存储范围就是 0
~2^32
,如果带符号位的话就是 -2^31
~ 2^31-1
。
在使用SQLyog
工具建表时,除了常见的几个属性Field Name
,DataType
,Len
,Default
,PK?
,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
,还提供了tinyint
,smallint
,mediumint
和bigint
。这些类型存储的数据范围都是不一样的,具体如下表:
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
(带符号的/无符号的) | (带符号的/无符号的) | ||
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)的更多相关文章
- mysql中的int和tinyint、varchar和char、DateTime和TimeStamp区别
一.int和tinyint的区别 大小: tinyint在mysql中占用1个字节 即: 1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方:11111111 = 256 在 ...
- 「MYSQL」MYSQL中的int(11)到底代表什么意思?
一.前言 在工作中经常要与mysql打交道,但是对mysql的各个字段类型一直都是一知半解,因此写本文总结记录一番. 二.简介 对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用 ...
- 简单谈谈MySQL中的int(m)
转载地址:https://www.jb51.net/article/93760.htm 设置int型的时候,需要设置int(M),以前知道这个M最大是255,但是到底应该设置多少并没有在意.注意zer ...
- MYSQL中的int(11)到底代表什么意思?
对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的int(11)代表什么意思,很长时间以来我都以为这代表着限制int的长度为11位,直到有天看到篇文章才明白,11代表的并不是长 ...
- mysql中为int设置长度究竟是什么意思
根据个人的实验并结合资料:1.长度跟可以使用的值的范围无关,值的范围仅跟类型对应的存储字节数和是否unsigned有关:2.长度指的是显示宽度,比如,指定3位int,那么id为3和id为300的值,在 ...
- MYSQL 中的 int(11) 到底代表什么意思?
各 INT 类型无符号最大值用单位表示: INT 类型 无符号最大值用单位表示 TINYINT 255 SMALLINT 65535 MEDIUMINT 1677 万 INT 42 亿 BIGINT ...
- Mysql中int(1)的误解及说明
在mysql中使用int相关的数据类型时, 如果不太了解其存储方式, 会产生一些误用的情况. 如: 只保存0-9之间的数字, 可能会直接用int(1). 习惯性的以为int(1)就相当于varchar ...
- Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)
刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...
- 抛砖系列之-MySQL中的数据类型JSON
今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...
随机推荐
- 从连接器组件看Tomcat的线程模型——NIO模式
Tomcat8之后,针对Http协议默认使用org.apache.coyote.http11.Http11NioProtocol,也就是NIO模式.通过之前的博客分析,我们知道Connector组件在 ...
- Vue全家桶之一Vue(基础知识篇)
全家桶:Vue本身.状态管理.路由. 异步组件:
- vue 应用 :多语言显示
<template> <div class="hello2"> <page-content> </page-content> < ...
- 给网站接入CloudFlare的CDN
注册并登录咱的CF账号 emmmmm 添加咱的域名 食用DNS
- Pull后产生多余的log(Merge branch 'master' of ...)
第一步: git reset --hard 73d0d18425ae55195068d39b3304303ac43b521a 第二步: git push -f origin feature/PAC_1 ...
- java基础知识--环境变量配置
说到java,大家应该都了解:J2SE基础.J2ME嵌入式.J2EE延伸的内容,而我们平时接触和所谈大部分都是J2EE企业级应用开发. 作为开发者,使用java之前,必须安装java开发环境,配置ja ...
- Java中hashCode方法的理解以及此小结的总结练习(代码)
笔记: “散列码”就是用来把一堆对象散到各自的队列里去的一种标识码. 举个形象一点的例子,一年有 365 天,从 1 编号到 365,下面我定义一种编码方法,每个人按照他生日那天的编号作为他的标识码, ...
- HTML标签火速入门
HTML标签火速入门 本文将从:HTML页面必备标签.HTML高频标签,火速入门,阅读完本篇,大概需要60分钟. HTML页面必备标签 我们通过HTML编辑器新建一个HTML文件后,编辑器会帮我们创建 ...
- mysql字符集 utf8 和utf8mb4 的区别
一.导读我们新建mysql数据库的时候,需要指定数据库的字符集,一般我们都是选择utf8这个字符集,但是还会又一个utf8mb4这个字符集,好像和utf8有联系,今天就来解析一下这两者的区别. 二.起 ...
- MacOS下JDK8的安装与配置
微信搜索"艺术行者",关注并回复关键词"jdk8"获取安装包和API文档资料! 一.安装环节 1.打开网页 https://www.oracle.com/jav ...