首先,我们创建一个数据表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提示超出了范围,这是为什么呢?

首先,我们先要了解一个基础知识点,就是下面这张表:(摘自W3C教程)

上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的字节大小都是固定的。例如,之前设置的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)之类的,基本没用。而且导致表的字段类型多样化。

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 mediumint是什么类型_MySQL中数值类型中smallint、mediumint等区别是什么 - 晓雨网...

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 基于Pygame写的翻译方法
  2. for循环的一种加速方法
  3. 只学一点点:我的技术学习策略
  4. feign返回null_109、Feign的服务降级和Turbine
  5. c语言坐标输出图片,tc 如何在指定坐标处 输出bmp图片??
  6. C++语言基础 —— STL —— 容器与迭代器 —— map 与 multimap
  7. 两个正数相乘为什么结果是负数
  8. Logistic回归小结
  9. ios transporter 缓存_鸿蒙和安卓都是开源,为什么iOS系统却可以获得出色的口碑?...
  10. Vue项目用webpack打包后,预览时资源路径出错(文末有vue项目链接分享)
  11. 82_Linux检测指定ip指定端口是否开放
  12. Linux系统软件看门狗
  13. 最近选购MP3而有感便携追求音质的一些心得
  14. safari打不开cookies_从Mac和iOS上的safari阻止cookies的设置方法
  15. linux安装iscsi设备,linux系统下安装配置iSCSI教程
  16. 分布式、微服务、集群
  17. python自学网站-杭州python自学网站
  18. 天梯赛HBU训练营——链表去重 (25分)(测试点2和段错误解决)
  19. C语言 弹小球 小游戏(控制台)
  20. 计算机上函数题怎么做,计算机等级考试,Excel操作题除函数公式外还有哪些常见问题?...

热门文章

  1. Springboot+vue的医院门诊管理系统的设计与实现(也有SpringCloud版本)
  2. 快乐编程大本营【java语言训练班】第5课: java的数组编程
  3. 物联网是如何让世界变得更好
  4. Android U盘 读写
  5. 高中必备学习软件_高中必备app下载-高中必备下载v2.0.7-西西软件下载
  6. 键盘只送男粉丝有错吗?这难道是性别歧视?
  7. 中国黑客档案:黑客近景写真(1)
  8. windows98的含义
  9. linux——基本工具:gcc/g++,make(makefile)与gdb
  10. tensorflow 中 fully_connected