在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M;

后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插入数据库中的值的字符长度不能大于M,例如,int(4),想要插入1234,1234的字符长度是4,就正好可以插入数据库,12341就不行,因为是5个字符长度,这也都是道听途说,自己从来没有验证过;

如今,由于面试中经常会被问到有关数据库方面的知识,今天也想着深入了解下这个M代表的含义(上述两个理解都是错误的)。

首先,我们创建一个数据表test:

mysql> CREATE TABLE test(
-> id1 int(1),
-> id2 tinyint(1)
->);
我们给id1定义为int,并设置字符长度为1,id2定义为tinyint,也设置字符长度为1;

然后分别插入值127,127,结果发现,两者都插入到了数据表中:

mysql> INSERT INTO test(id1,id2) values(127,127);//运行成功
结果是插入成功的,从此次测试已经可以知道,我之前的想法都是错误的,接下来我们再做一个实验,插入数据128,128,即id=128,id2=128:

mysql> INSERT INTO test(id1,id2) values(128,128);//运行失败:ERROR 1264 (22003):Out of range value for column 'id2' at row 1
出错了,int类型的id1插入成功了,tinyint类型的id2提示超出了范围,这是为什么呢?

上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的字节大小都是固定的。例如,之前设置的int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换句话说就是,你可以存入有符号整型从-2 147 483 648到2 147 483 647包括这两个数的中间任何一个数。int(1)和int(11)占用的是4个字节,可以存入上述这些数,tinyint(1)和tinyint(4)占用的是1个字节,可以存入从-128到127的数,这也是为什么之前的一次试验,int(1)插入128成功,而tinyint(1)插入128却提示超出长度。

那么,这个M值到底代表什么意思呢?

到这里,我们已经可以发现,M值即使设置为1,它也可以存入字符长度大于1的值,那么,如果存入的字符长度小于1会怎么样?我们来试一试:

先将id1的类型更改为int(2),然后插入数据id1=1:
mysql> ALTER TABLE test Modify id1 int(2);
mysql> INSERT INTO test(id1) values(1);//运行成功,说明值1已经插入到test表中

我们查询一下表中的数据,看看结果具体如何:

复制代码
mysql> SELECT * FROM test;
+------+
| id1 |
+------+
| 1 |
+------+
复制代码
接下来,我们再修改一下id1的填充数据类型zerofill(表示用0填充),这里先知道如何操作即可,我们再从结果得出结论:

复制代码
mysql> ALTER TABLE test MODIFY id1 int(2) zerofill;
mysql> SELECT * FROM test;
+------+
| id1 |
+------+
| 01 |
+------+
复制代码
现在是不是有些清楚了。我们设置的M值是2,没有设置zerofill用0填充时,对于操作没有任何影响,而设置了zerofill后,我们可以清楚地看到值1字符数不足M值,左前位置补0。我们也可以将M值设置成别的大小进行多次测试,这里就不进行测试了。

需要强调的是,不同的数据类型中的M值意义是不一样的,我们这里仅讨论整型中的M值。

从上面我们可以得到如下的结论:

1、整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度;

2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;

3、当存储的字符长度小于M值时,只有在设置了zerofill用0来填充,才能够看到效果,换句话就是说,没有zerofill,M值就是无用的。
总结:int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。这个东西基本没有意义,除非你对字段指定zerofill。

所以我们在设计mysql数据库时,建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。

参考博客:http://www.cnblogs.com/stringzero/p/5707467.html
https://www.cnblogs.com/totian/p/7065123.html

MySQL中int(M)和tinyint(M)数值类型中M值的意义相关推荐

  1. mysql中int(16)_MySQL中int(M)和tinyint(M)数值类型中M值的意义

    在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M: 后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插 ...

  2. mysql数据库中的int类型_MySQL中int(M)和tinyint(M)数值类型中M值的意义

    在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M: 后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插 ...

  3. mysql int tinyint_MySQL中int(M)和tinyint(M)数值类型中M值的意义

    首先,我们创建一个数据表test: mysql> CREATE TABLE test( -> id1 int(1), -> id2 tinyint(1) ->); 我们给id1 ...

  4. mysql 中int(M)和tinyint(M)数值类型中M值的意义

    首先,我们创建一个数据表test: mysql> CREATE TABLE test(-> id1 int(1),-> id2 tinyint(1)->); 我们给id1定义为 ...

  5. mysql mediumint是什么类型_MySQL中数值类型中smallint、mediumint等区别是什么 - 晓雨网...

    MySQL 支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型 数值类型中又可以分为整型.浮点型,或者可以说为严格数值数据类型以及近似数值数据类型 分别为 tinyint(m).sm ...

  6. Mysql数据库int(1)和tinyint(1)的区别扩展阅读

    今天看项目的数据库结构设计,发现一个奇怪的地方. `xxx_detail`   `delflag` int(1) NOT NULL DEFAULT '0' COMMENT '删除标志', `xxx_c ...

  7. Golang中 int int8 int16 int32 int64的区别和取值范围

    先说结论吧,方便快速查询验证. 总结 区别 int 类型大小为 8 字节 int8 类型大小为 1 字节 int16 类型大小为 2 字节 int32 类型大小为 4 字节 int64 类型大小为 8 ...

  8. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  9. MySQL - SQL语句增加字段/修改字段/修改类型/修改默认值

    1.应用场景 有时[比如在Linux服务器下]需要使用SQL语句直接对数据表进行新建/修改表结构, 填充/更新数据等. 或借助数据库管理工具执行SQL,但是这种方法,比较适合做微小的操作- 好处: 使 ...

  10. java中什么表示菜单项_下列类型中,表示菜单项的是( )。_学小易找答案

    [单选题]下列项目属于直接费用的是( ). [单选题]已知立体的三视图,选择正确的立体图 [填空题]气候统计预测,一般分为四步.首先,( );其次,( );再次,( );最后,( ). A 建立统计模 ...

最新文章

  1. 能带曲线图绘制python_如何使用python的matplotlib模块画折线图
  2. Python 安装 xlsx模块
  3. 2018-2019-1 20165212 20165313 2016522 实验一 开发环境的熟悉
  4. Ubuntu修改DNS服务器
  5. MySQL数据库备份(INTO OUTFILE)
  6. GitPages个人域名博客
  7. Flink常见流处理API
  8. ft2232驱动安装方法_win7系统无法安装打印机驱动程序的解决方法
  9. 一图精通python3
  10. 高赞 GitHub 项目盘点:给力的 Spring 教程
  11. GNU Make构建工具使用教程
  12. 关于PX像素、PT点数、CM厘米、MM毫米之间的换算
  13. CSS实现多余文本隐藏
  14. Python数据可视化第 7 讲:matplotlib绘制直方图函数hist
  15. webpack自定义loader
  16. 计算机专业课程计划,计算机专业课程表(教学计划)
  17. SR(Segment Routing)不是MPLS的优化和升级
  18. 【软考总结】不负韶光--I eat konwledge like air.
  19. 计算机类专业入门知识
  20. 于宙:我们这一代人的困惑

热门文章

  1. SSM整合完整流程讲解
  2. 计算机中解决不匹配,电脑显示屏显示不匹配.怎么办
  3. linux php muma,php实现Linux服务器木马排查及加固功能
  4. 利用weevely生成php后门木马
  5. 北京内推 | 微软亚洲研究院智能多媒体组招聘CV/NLU/RL方向算法实习生
  6. 什么是443端口?HTTPS是什么端口?如何工作
  7. CentOS 7.6镜像下载
  8. E. Easy Measurements(解不定方程)
  9. 我的拆机经历——戴尔灵越5570系列
  10. scp 传目录_目录传输命令scp