在一开始接触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)之类的,基本没用。而且导致表的字段类型多样化。

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

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

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

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

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

  3. 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. int mysql是什么意思_MySQL数据类型 int什么意思

    MySQL数据类型 int什么意思 关注:136  答案:2  mip版 解决时间 2021-01-30 21:51 提问者叫我女王 2021-01-30 10:52 MySQL数据类型 int什么意 ...

  6. python语言中整型对应的英文是什么-12.Python数值类型(整形、浮点型和复数)及其用法...

    实际开发中,我们经常需要使用数字记录游戏中用户的得分.游戏中角色的生命值.伤害值等信息,Python 语言提供了数值类型用于保存这些数值. 需要注意的是,Python 中这些数值类型都是不可改变的,也 ...

  7. [转载] python字符串转化为16进制数_python实用知识,数值类型和进制整数的转换

    参考链接: 在Python中将整数int转换为字符串string 喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 1.数值类型的转换 int()可以将字符串 ...

  8. mysql中将int转为_mysql – 将int转换为varchar

    您将需要 cast或 convert作为CHAR数据类型,没有varchar数据类型,您可以将数据转换/转换为: select CAST(id as CHAR(50)) as col1 from t9 ...

  9. mysql int 拼接_MySQL 修改int类型为bigint SQL语句拼接

    SELECT CONCAT( "alter table ", TABLE_SCHEMA, ".", TABLE_NAME, " modify &quo ...

最新文章

  1. 零基础python必背代码-30个Python常用极简代码,拿走就用
  2. Android中使用retrofit2进行网络get请求查询数据和post请求上传文件
  3. k8s修改kube-apiserver的service-node-port-range端口范围
  4. 【最新合集】编译原理习题(含答案)_20代码生成_MOOC慕课 哈工大 陈鄞
  5. onlyoffice更新中文字体总结
  6. anaconda在ubuntu中添加环境变量
  7. java数组图片_在JAVA中定义图片数组
  8. python统计字数分布可视化展示_数据的概率分布并用python实现概率分布可视化图...
  9. 按钮跳转到其他ui界面_《明日方舟》UI/UX设计复盘
  10. Git commit/pull/push的操作步骤
  11. Ubuntu16下载tomcat8
  12. Graphviz安装配置教程(图文详解)
  13. JVisualVM初步使用
  14. CodeForces - 999C Alphabetic Removals
  15. 2018年深圳,武汉房价走势分析
  16. 纯干货!视频控件VideoCapX的使用指南和常见问题合集
  17. sublimeText3配置sublimeLinter
  18. CSS 属性:caret-color
  19. 类似QQ空间,微信朋友圈,微博主页等,展示图片的九宫格控件
  20. Python绘制彩色蟒蛇

热门文章

  1. python把数据写入excel_Python读取和写入Excel文件(转)
  2. Faster R-CNN改进篇(一): ION ● HyperNet ● MS CNN
  3. 目标检测中召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))
  4. 目标检测方法系列——R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD
  5. 图像处理基本算法 形状特征
  6. Docker与自动化测试及其测试实践
  7. 浅谈csrf攻击以及yii2对其的防范措施
  8. 代码:显示查询的日历
  9. linux中tr命令的用法
  10. 神经网路语言模型(NNLM)的理解