MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解

逆熵柯里化
• 阅读 1677

一、Mysql中数值类型

下图为Mysql支持的数值类型及取值范围

MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解


  1. BIT[M] 位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
  2. TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4 ,小的整数。带符号的范围是-128到127。无符号的范围是0到255。
  3. SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6 ,小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
  4. MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9 ,中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
  5. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11 ,普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
  6. BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20 ,大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。

需要注意

这里的M代表的并不是存储在数据库中的具体的长度,如果误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是不对的 tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill才是有用(也就是零填充时), 如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充`。

二、有无限制的区别是什么

  1. 对应Integer 类型而言,仅表示字段的显示宽度。
  2. 对于DECIMAL类型,表示数字的总数。
  3. 对于字符字段,这是可以存储的最大字符数,例如VARCHAR(20)可以存储20个字符。
  4. 显示宽度并不影响可以存储在该列中的最大值。int(5)和int(11) 所能存储的最大范围是一样的。
  5. 将某个字段设置成INT(20)并不意味着将能够存储20位数字,这个字段最终能存储的最大范围还是 INT 的范围。

三、有无符号的区别是什么

那么问题来了,既然加不加数字并没有什么区别,那为什么还多此一举呢?

“正常”情况下确实没有什么区别,只有当字段设置为UNSIGNED ZEROFILL 属性时,INT 增加数字才会有意义。
表示如果要存储的数字少于N 个字符,则这些数字将在左侧补零。

四、常用的int(11)代表什么意思

id INT(11) NOT NULL AUTO_INCREMENT,

在一些建表语句会出现上面 int(11) 的类型,那么其代表什么意思呢?

  1. 对于Integer类型括号中的数字称为字段的显示宽度。这与其他类型字段的含义不同。
  2. 显示宽度并不影响可以存储在该列中的最大值。INT(5) 和 INT(11)可以存储相同的最大值。哪怕设置成 INT(20) 并不意味着将能够存储20位数字(BIGINT),该列还是只能存储INT的最大值。
  3. 对于DECIMAL类型,表示数字的总数。
  4. 对于字符字段,这是可以存储的最大字符数,例如VARCHAR(20)可以存储20个字符。
当列设置为UNSIGNED ZEROFILL时,INT(11)才有意义,其表示的意思为如果要存储的数字少于11个字符,则这些数字将在左侧补零。

五、简述Decimal(M,D)数据类型用法

当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型。

1.简述

语法是DECIMAL(M,D)
MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解

  • DECIMAL(M,D)中M为总长度,D为小数点后的保留的位数,M范围是1到65,D范围是0到30。
  • M大于D,存储数值时,小数位不足会自动补0,首位数字为0自动忽略。

2.重点

MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解

六、总结

  1. 对于Integer 类型而言,“数字”并不会限制其能存储的最大范围。
  2. DECIMAL(M,D)中M为总长度,D为小数点后的保留的位数
  3. 对于字符字段,这是可以存储的最大字符数,例如VARCHAR(20)最多存储20个字符。
  4. 如果误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是不对的 3和11并不表示存储长度,只有字段指定zerofill才是有用(也就是零填充时),左边用0来填充`。**
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Wesley13 Wesley13
3年前
Mysql 数据类型、约束类型
mysql数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUME
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL总结
mysql数据库字段类型在mysql中包含的数据类型很多,这里主要列出来常用的几种数字:int(整数),decimal(浮点数)字符串:char(不可改变字符数),varchar(有限长度,可变字符    数),text(大文本)约束
Wesley13 Wesley13
3年前
MySQL数据类型全解析
1概述本文主要介绍了MySQL的各种数据类型,版本为8.x,MySQL的数据类型可以分为六类:数值类型,日期时间类型,字符串类型,二进制类型,JSON类型与空间数据类型.2数值类型数值类型是最基本的类型,可以分为整数类型与浮点数类型.2.1整型类型字节数无符号范围有符号范围TI
Wesley13 Wesley13
3年前
MySQL数据库DDL、DML详解
一、MySQL数据库数据类型<1MySQL数据库中支持多种数据类型数值型字符型日期型<2常用的数据类型整型int:整型,存储整数int(M):M表示预期值,与存储大小和数值的范围无关idi
Wesley13 Wesley13
3年前
MYSQL学习笔记(一)数据类型
MySQL数据类型一、数值类型1.整型类型大小范围(有符号:默认)范围(无符号)TINYINT1字节(128,127)(0,255)SMALLINT2字节(32768,32767)(0,65535)MEDIUMINT
Wesley13 Wesley13
3年前
mysql查询每个学生的各科成绩,以及总分和平均分
今天看一个mysql教程,看到一个例子,感觉里面的解决方案不是很合理。问题如下:有学生表:!在这里插入图片描述(https://oscimg.oschina.net/oscnet/07b001b0c6cb7e0038a9299e768fc00a0d3.png)成绩表:!在这里插入图片描述(https://oscimg.o
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究