用通俗易懂的大白话彻底搞明白mysql的数据类型以及mysql中的int(11),这个11到底是啥?

news2024/12/27 10:47:59

今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问?

ok,今天就展开来讲一下,用通俗易懂的大白话来给你彻底搞明白

一、跟你扯点二进制的小东西

要讲清楚这个问题,我先来给大家科普一点计算机比较基础的二进制的东西

1byte 也就是 一字节 等于 8个bit位(也就是8个比特位),稍微接触过计算机知识的,这个应该都知道,没啥疑问吧?

好,那接下来,我再问个问题:一字节 也就是8bit  到底代表啥意思?或者说一字节 8bit 到底能干啥呢? 它能干的事可太多了,但是它具体能干啥,我先不说,先看我下面要说的内容,看懂了下面我写的内容,相信你会有所收获的。

为了解答以上的疑问,继续抛出问题:我问你,0000 0000   这8个位置 用 0 1 来表示能排列组合出多少种组合?

0000 0000

0000 0001

0000 0010

0000 0011

0000 0100

...........

1111 1111

等等等等,我就不一 一列举了

你会发现,这不就是二进制一个一个的往下写吗?

对,就是二进制一个一个的往下排着写,写完之后,你数数排列出了多少种情况?(你别真去数啊,百度一下就行了····)

我帮你数过了,是256种

也就是说,8个位置 如果用0 和1 来排列组合的话,一共能排列组合出256种情况。

一个字节 8个bit位 说完了

那两个字节 16个bit位呢

三个字节 24个bit位呢

四个字节 32个bit位呢

八个字节 64个bit位呢?

好,你不用一个一个数(百度)了,我给你数好了

两个字节 16个bit位:65536种

三个字节 24个bit位:16777216种,也就是1600多万。太具体的不用记,就记住1600万多就行了

四个字节 32个bit位:4294967296种,也就是42亿多。太具体的不用记,就记住42亿多就行了

八个字节 64个bit位:18446744073709551616,也就是一个20位的数。就记住是一个20位的数就行了。

等等等等,中间没说的5个字节,6个字节,7个字节,以及后边更多的字节,就不用我一一列举了吧?

二、mysql中的数据类型分析:整数类型

好,明白了上边我说的这些之后,下边我把mysql中整数型的各个数据类型给你列举出来,把mysql中的这些数据类型和上边说的:

一个字节、两个字节、三个字节、四个字节、八个字节一 一对应起来

mysql的整数型数据类型:

tiny int    一个字节 

small int    两个字节

medium int   三个字节

int  四个字节

big int 八个字节

到这里,脑子里有点感觉了吗?

有的小伙伴可能已经想到了:按照这个套路推理的话,很容易就能得出以下的结论:

tiny int  一个字节,它能表示的范围是 0-255 (一共256个坑位)

small int    两个字节,它能表示的范围是 0-65535(一共65536个坑位)

medium int   三个字节,它能表示的范围是 0-1600多万(一共1600万多个坑位)

int  四个字节 ,它能表示的范围是 0-42亿多(一共42亿多坑位)

big int 八个字节,它能表示的范围是0-18446744073709551615(一共18446744073709551616个坑位)

但是,可能有人知道或者百度了,说 不对啊,百度上说 tiny int 的范围是 -128 到 127啊

对,百度上没说错,但是说 -128 到 127的 他们说的都是默认有符号的情况

那啥叫有符号啊?就是有正有负呗

你可以看下mysql你建表建字段的时候,它会让你勾选 是否无符号的

 它默认是有符号的 是 -128 到 127的,你勾选了无符号,那就是 0-255了

到这里,没啥疑问吧?

好,继续思考,

那有符号的情况下,mysql为啥非得规定是 -128 到 127呢?为啥非得是负的比正的多一个呢?为啥就不能是 负-127到正128呢???能想到这个问题非常好,说明你真正的用脑子思考了。

针对或者问题,我的理解是:反正坑位一共就256个坑位,看你想往里填什么了,mysql的设计者以及大部分语言的设计者都很默契的一致认为往里填负128 到  正127的这些值更为合理,至于为啥更合理,我觉得这是个经验值,设计成负128到正127在实际的应用中更合理,我也觉得人家设计的没毛病挺合理的,哈哈
理解了吗?还不理解的话,我再给你举个更极端的例子
比如你已经牛逼到能自己设计发明数据库了,然后你发明了个数据库,你就是想在你发明的数据里定义一种数据类型叫 mytiny int,你规定它占一个字节,然后一个字节能表示出256种排列组合的可能性,也就是一个字节能表示256个坑位,然后你就非得规定这256个坑位里装 -100到155这256个数,完全没问题,看你怎么设计了!当然了,举这个例子只是为了帮助你更容易去理解我说的这些知识点,在实际中,不会有人这么傻这么偏激的去把一个byte的数据类型设计成 -100 到 155 这个范围的,因为这么做在大部分实际的应用场景中是不合理的,或者用起来是不方便的

像人家mysql数据库以及Java等一些编程语言是给众多的开发者用的,他们设计的时候得考虑实际操作中的合理性。

上边我写了一句话:反正坑位一共就256个坑位,看你想往里填什么了。记住!我觉得理解这句话非常非常重要。

真正理解了这句话,你很容易就能理解以下两点:(以及刚才我上边说的一字节 也就是8bit  到底代表啥意思?或者说一字节 8bit 到底能干啥呢? 它能干的事可太多了)

1、强类型语言里的一些数据类型为啥是这么设计了,比如Java里的整型数据 byte、short、int、long,等等等

2、你会对编码表有一个新的认识与理解,你会慢慢的理解计算机刚开始是怎么一点点认识美国的abc这种文字、计算机是怎么认识中国的汉字、是怎么认识韩国的韩文、日本的日文,等等等世界上全部国家的文字。为啥美国的ASCII编码占1个字节,为啥中国的gbk gb2312编码占2个字节,以及Unicode、UTF-8的由来等等。

美国的ASCII编码占1个字节,是因为一个字节 8个bit位能排列组合出256个坑位,256个坑位就已经足以把美国键盘上的字母、数字、符号全部包含进去了,标准的键盘上所有的键位一共是104个,256个坑位去装104个内容足以了。中国的gb2312、gbk 占2个字节是为啥呢?因为中国的文字太多了,一个字节256个坑位肯定装不下啊,所以,一个字节不够,那两个字节够吗?上边已经讲过了,2个字节 16个bit位,能排列组合出65536个坑位,那65536个够装所有的汉字吗?答案是不够,因为所有的汉字是9万多个,但是为啥gb2312、gbk还用2个字节来装汉字呢?因为虽然所有的汉字是9万多,但是有很多基本上用不到的,所以刚开始的gb2312它是收录了6763个比较常用的汉字,后期的gbk对汉字编码做了扩充,它收录了汉字和中文符号21886个,所以2个字节也足够了。

这就是为啥不同的字符集编码占的字节数不同的原因了

感兴趣可以看下我另外一篇文章:大白话系列之——聊一聊各种编码表的由来ASCII、GB2312、GBK、Unicode、UTF-8等

我最近开通了几个专栏,里边有更多用大白话讲的干货,里边有更多我自己理解的一些知识点,绝对干货,不拖泥带水,感兴趣的小伙伴可以去看看,专栏持续更新中,后期会持续更新更多的大白话干货

通俗易懂的大白话干货系列

带你玩转实际工作中的Jenkins系列

好了,讲了这么多,其他几个整数型的数据类型以及其他更多的数据类型就不过多的讲了,以此类推很容易理解的

三、int(11),这个11到底是啥?

还有一种情况可能很多人都会误解,比如在mysql里定义一个字段的类型为 int(11)

很多人可能都会简单的认为这个11代表的意思 就是这个字段能存的最大值是11位

我再定义一个字段为int(5),那这个字段最大值就是5位的。

这是不对的,而且是个非常大的误解!

那它到底是啥意思,继续往下看,我会给你整的明明白白的

mysql里的定义一个数据为int(11),代表的并不是这个数据最大只能11位,在mysql里一个字段的数据类型一旦确定了以后,那这个字段最大能表示值也就确定了,它的最大值也就是你定义的这种数据类型的最大值(也就是我上边讲的有符号和无符号的数值范围)

比如 tiny Int,有符号的最大值是127,无符号的最大值是255

small Int ,有符号的最大值是32,767,无符号的最大值是65535

medium int ,有符号的最大值是8,388,607,无符号的最大值是16,777,216

int ,有符号的最大值是2,147,483,647,无符号的最大值是4,294,967,296

这四种类型的最大值其实我上边已经说过了

需要注意的是这个类型能表示的最大值,以及能表示的数值范围,是根据你选择的是有符号还是无符号,是不一样的。

也就是说,你定义了这个字段 是 int型的,并且定义了它默认是有符号的,那它的最大值以及最大的位数就已经定了,是:2,147,483,647,和你int(x) 后边括号里的这个数是没关系的!

好,知道了这些之后,下边继续讲

那这个int(11)  这个11到底是啥?我定义这个11有啥用呢?

答案就是:这个11是mysql规定的数据显示的宽度,那啥叫显示的宽度?

mysql有个选项叫 是否填充0

比如:你定义一个字段数据类型是int(5),而且你勾选了需要填充0,那你存一个1进去,mysql给你展示出来的就是 00001,也就是说你存的数据,位数不够5位的话前边补0,我下面的截图,看到了吗?

那int能表示的最大值绝对不止5位啊,那我如果存一个大于5位的数进去呢?

比如我存一个12345666进去,会怎么样?

它能让你存进去,而且它显示的时候也不会把超过5位后的给你截取掉只给你显示前5位,它是正常的全部给你显示,下图看到了吗


也就是说这个填充0,针对的只是位数不够的情况,如果不够的话,前边会补0
如果大于指定的位数,它不会做任何处理
我觉得理解上边我说的这一点非常非常重要!!!很多人都没搞不明白,至少我身边的很多人都是没明白,都是稀里糊涂的在用

 ok,关于mysql中的数据类型我就分享先分享这么多吧,希望对你能有帮助

如果觉得文章对你有所帮助,可以点关注,点赞。纯手打,原创不易,也可以支持订阅一下专栏,里边有更多用大白话讲的干货,都是我自己理解的一些知识点,绝对干货,不拖泥带水!专栏持续更新中,后期会持续更新更多的大白话干货

通俗易懂的大白话干货系列

带你玩转实际工作中的Jenkins系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度分析React源码中的合成事件

热身准备 明确几个概念 在React17.0.3版本中: 所有事件都是委托在id root的DOM元素中(网上很多说是在document中,17版本不是了);在应用中所有节点的事件监听其实都是在id root的DOM元素中触发;React自…

【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】

【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】【1】mysql储存过程及语法结构【1.1】mysql过程体【2】mysql创建和使用存储过程【2.1】mysql创建无参的存储过程【2.2】mysql创建有参的输入输出存储过程【3】mysql删除存储过程【4】mysql创建复合结构的存储…

专精特新小巨人的认定条件

奖励:对新认定的专精特新“小巨人”企业,聊城市财政最高一次性奖励50万元。其他地区各有不同。 认定条件 专精特新“小巨人”企业认定需同时满足专、精、特、新、链、品六个方面指标。 (一)专业化指标:坚持专业化发展道路,长期…

大学生体育运动网页设计模板代码 DIV布局校园运动网页作业成品 HTML学校网页制作模板 学生简单体育运动网站设计成品

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

C++知识精讲14 | 算法篇之二分查找算法

博主主页:Cool Kid~Yu仙笙_C领域博主🦄 目录 二分查找定义 二分查找效率 二分查找与遍历的对比 二分查找的限制性 二分查找的限制性(总结) 二分查找搭建 循环实现二分查找 循环二分查找基本框架: 循环二分查找源码&am…

【苹果家庭iMessage推送】Aupperpushslcertificate或ProductPushsCertificate证书不可以过期

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

前端实现给文字添加动态背景

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

【JAVA开发】提高开发效率的工具分享

代码管理工具 仓库: GitHub or GitLab or 本地仓库 版本控制: git or svn 推荐gitLabgit 多分支敏捷开发 开发工具 IDEA 最方便开发工具了 当然如何你是全栈也可以考虑使用VS(visual studio)、HBuider、AS(android studio) 文本工具 Sublime text …

Redis数据结构之整数集合

目录 基本数据结构 例子 升级 升级之后新元素的摆放位置 好处 降级 整数集合可以理解为一个有序(升序)的不允许元素重复的数组。 基本数据结构 intset会根据 编码格式分配空间。 例子 升级 当新添加的元素超过了当前编码格式所能 表示的范围&…

Linux常用命令工具

1、查找特定文本中的特定字符 cat filename | grep myStr eg: cat .config | grep KCOV 2、查找特定文本中的特定字符并打印具体行数 cat filename | grep -n myStr eg:: cat .config | grep -n KCOV 3、查找一个文件夹中的特定字符 grep -r myStr filedir eg: grep -r __NR_…

Mysql注入

💪💪mysql注入前言1.mysql之union注入1.1.判断是否有注入:1.2.信息收集1.3.进行注入1.4.完整注入实列2. mysql 跨库注入:2.1第一步就是找到数据库2.2第二步就是注入3.自己写union注入4.其他注入操作前言 💎&#x1f48…

JVM笔记:垃圾回收及垃圾回收算法

垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢…

【Vue项目回顾】网络模块的封装

选择什么网络模块 选择一: 传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢? 非常好解释, 配置和调用方式等非常混乱.编码起来看起来就非常蛋疼.所以真实开发中很少直接使用, 而是使用jQuery-Ajax 选择二: 在前面的学习中, 我们经常会使用jQuery-Ajax 相对于传统的A…

【PyTorch深度学习项目实战100例】—— 基于Pytorch的语音情感识别系统 | 第71例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

C#和Python使用C++编译的dll

C代码如下: extern "C" __declspec(dllexport) int __stdcall add(int a, int b) {return a b; } 因为是显示链接,所以只需要获得生成的dll即可 因为C#无法直接调用C的dll,所以我们使用了extern"C" 使用vs自带的工具x86_x64 Cross…

Vue中KeepAlive 原理与源码分析

概念 keep-alive是Vue的一个内置实例,用于缓存组件。当keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是摧毁它们。keep-alive 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链之中。如需要…

网课查题API接口-搜题api

网课查题API接口-搜题api 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#x…

小学生python游戏开发pygame--设置内容整理

游戏开发,相关设置内容单独放在一个文件中 如长宽,大小,颜色等起名shezhi.py,如下: # _*_ coding: UTF-8 _*_ # 开发团队: 信息化未来 # 开发人员: Administrator # 开发时间:2022…

微信小程序中如何实现省市区街道四级地址级联选择

大家好,我是雄雄。 前言 微信小程序中支持省市区地址级联吗?微信小程序中的地址级联最多支持到几级? 今天,我们就来看看,微信小程序中的地址级联的使用,以及一些坑…希望大家看完之后能避免踩坑啊。 省市…

JS(受人以鱼 不如受人以渔)第十七课

比你优秀的人都比你努力,你有什么理由不去努力。基础来自己的累秒累天累月的积累 没有一个人是从天而降的天才,也没有哪个人想做一个一生贫庸的人。今天我想说 受人以鱼 不如受人以渔 推荐几个官网可以自己主动去学习 JavaScript中文网-JavaScript教程…