今天抽时间来讲一下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系列

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

  1. mysql 日期的数据类型,MySQL日期数据类型、MySQL时间类型使用总结

    摘要 腾兴网为您分享:MySQL日期数据类型.MySQL时间类型使用总结,政务易,悬浮球,网赚招聘,社会扶贫等软件知识,以及水星mw150us,街机123,脉脉app,安卓优化大师hd,优声,uc订阅 ...

  2. mysql 变量 数据类型_MySQL(MySQL的数据类型)

    理解MySQL数据类型 避免数据库设计出现混乱 本文突出介绍了MySQL支持的很多重要的数据类型,并介绍如何使用. 数据库存储中的数据类型与大小各异.有些地方只存储数字类型,有些只存储文本类型,有些二 ...

  3. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  4. php mysql存中文,PHP+MySQL存储数据常见中文乱码问题小结

    PHP+MySQL存储数据常见中文乱码问题小结 本文实例总结了PHP+MySQL存储数据常见中文乱码问题.分享给大家供大家参考,具体如下: PHP+MySQL出现中文乱码的常见原因: 1. MYSQL ...

  5. mysql的datepart函数_MySQL中的 DATE_FORMAT 与 SQL 中的 DATEPART()函数使用介绍

    本小白最近学习MySQL,因为之前是已经有学过微软大佬的SQL Server所以自认为理解的还是稍快的(滑鸡),好了说正事. 今天在写一个查询语句时,需要用到 一个日期函数:DATEPART( ) 因 ...

  6. mysql的datepart函数_MySQL中的 DATE_FORMAT 与 SQL Server中的 DATEPART()函数使用介绍

    本小白最近学习MySQL,因为之前是已经有学过微软大佬的SQL Server所以自认为理解的还是稍快的(滑鸡),好了说正事. 今天在写一个查询语句时,需要用到 一个日期函数:DATEPART( ) 因 ...

  7. MySQL日期数据类型、时间类型使用总结

    转载链接:http://www.jb51.net/article/23966.htm MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ----- ...

  8. 复制MySQL实时_自制mysql主从复制(实时)软件——实现

    以下是主要的java实现代码:具体设计参考 1.create table package migrate; import java.util.ArrayList; import java.util.V ...

  9. mysql空间数据类型解释_MySQL空间数据类型

    MySQL空间数据类型讲解 MySQL具有与OpenGIS类对应的数据类型.某些类型只能保存单个几何值: GEOMETRY POINT LINESTRING POLYGON GEOMETRY能够保存任 ...

最新文章

  1. Zookeeper ZAB协议原理浅析
  2. usr share里没有mysql_无法在ubuntu 12.04上安装mysql,找不到消息文件’/usr/share/mysql/errmsg.sys’...
  3. Redis做消息队列,香吗?
  4. 《JAVA练习题目8》 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number
  5. 2018.3.29 网页中嵌套网页的两种方法
  6. 简述python中面向对象的概念_简述Python中的面向对象编程的概念
  7. 通信系统概论_现代通信系统概论 第一章 概述(1)
  8. LeetCode 4. Median of Two Sorted Arrays
  9. VC下sql+ado数据库v_strTemp.vt == VT_NULL判断的问题
  10. 西安Uber优步司机奖励政策(12月14日到12月20日)
  11. Java 设计模式 之 工厂方法模式、抽象工厂模式
  12. EasyUI框架分页实现
  13. PMP考试提分必刷题
  14. 什么是计算机图形学?
  15. 容量管理体系建设实践
  16. windows动态ip和静态ip的bat文件
  17. redis 实践笔记和源码分析
  18. AddressBook 代码详解
  19. MySQL数据库+jdbc -- 笔记
  20. 文档印刷体中字符类符号

热门文章

  1. Jupyter 安装与应用
  2. 浅谈clientX、offsetX、screenX、pageX
  3. VulnHub - Pluck靶机
  4. SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇
  5. NTL密码算法开源库——模二整数上的矩阵(mat_GF2)
  6. 思科tar格式IOS升级方法
  7. 金蝶全渠道营销列车,邀请您上车
  8. 前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal)
  9. 苹果cms影视建站系统免费吗?
  10. 小公司做个网站多少钱,个人网站怎么制作