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

 更新时间:2023年06月19日 14:03:51   作者:Dream_sky  
这篇文章主要介绍了MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)字段详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、Mysql中数值类型

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

  • BIT[M] 位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
  • TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4 ,小的整数。带符号的范围是-128到127。无符号的范围是0到255。
  • SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6 ,小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
  • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9 ,中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
  • INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11 ,普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
  • 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来填充`。

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

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

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

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

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

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

id INT(11) NOT NULL AUTO_INCREMENT,

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

  • 对于Integer类型括号中的数字称为字段的显示宽度。这与其他类型字段的含义不同。
  • 显示宽度并不影响可以存储在该列中的最大值。INT(5) 和 INT(11)可以存储相同的最大值。哪怕设置成 INT(20) 并不意味着将能够存储20位数字(BIGINT),该列还是只能存储INT的最大值。
  • 对于DECIMAL类型,表示数字的总数。
  • 对于字符字段,这是可以存储的最大字符数,例如VARCHAR(20)可以存储20个字符。

 当列设置为UNSIGNED ZEROFILL时,INT(11)才有意义,其表示的意思为如果要存储的数字少于11个字符,则这些数字将在左侧补零。

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

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

1.简述

语法是DECIMAL(M,D)

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

2.重点

六、总结

  • 对于Integer 类型而言,“数字”并不会限制其能存储的最大范围。
  • DECIMAL(M,D)中M为总长度,D为小数点后的保留的位数
  • 对于字符字段,这是可以存储的最大字符数,例如VARCHAR(20)最多存储20个字符。
  • 如果误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是不对的 3和11并不表示存储长度,只有字段指定zerofill才是有用(也就是零填充时),左边用0来填充`。**

以上就是MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解的详细内容,更多关于MySQL数值字段类型长度的资料请关注脚本之家其它相关文章!

相关文章

  • Mysql索引性能优化问题解决方案

    Mysql索引性能优化问题解决方案

    这篇文章主要介绍了Mysql索引性能优化问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • MySQL 与 Elasticsearch 数据不对称问题解决办法

    MySQL 与 Elasticsearch 数据不对称问题解决办法

    这篇文章主要介绍了MySQL 与 Elasticsearch 数据不对称问题解决办法的相关资料,对于 elasticsearch 增量写入,但经常jdbc源一端的数据库可能会做数据库删除或者更新操作,这里提供解决办法,需要的朋友可以参考下
    2017-08-08
  • MySQL查看和修改时区的实现方法

    MySQL查看和修改时区的实现方法

    本文主要介绍了MySQL查看和修改时区,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 浅谈sql语句中GROUP BY 和 HAVING的使用方法

    浅谈sql语句中GROUP BY 和 HAVING的使用方法

    GROUP BY语句和HAVING语句,经过研究和练习,终于明白如何使用了,在此记录一下同时添加了一个自己举的小例子,通过写这篇文章来加深下自己学习的效果,还能和大家分享下,同时也方便以后查阅,一举多得,下面由小编来和大家一起学习
    2019-05-05
  • MySQL之表碎片化的问题解决

    MySQL之表碎片化的问题解决

    MySQL数据库的碎片是由于频繁的增删改查操作导致的数据块不连续或不规则分布,本文主要介绍了MySQL之表碎片化的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • MyCat 垂直分片和水平拆分的实现

    MyCat 垂直分片和水平拆分的实现

    本文主要介绍了MyCat 垂直分片和水平拆分的实现,垂直分片将不同类型的表拆分到不同的数据库服务器上,水平拆分则将大表拆分到多个服务器上,下面就来具体介绍一下,感兴趣的可以了解一下
    2025-03-03
  • 深入解析MySQL中的约束

    深入解析MySQL中的约束

    约束是关系型数据库的一个重要的功能,主要作用是保证数据的完整性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正常),本文给大家介绍MySQL中的约束,感兴趣的朋友一起看看吧
    2025-10-10
  • Mysql8.4.3LTS中离线部署的实现示例

    Mysql8.4.3LTS中离线部署的实现示例

    本文详细介绍了在Ubuntu 24.04系统上离线部署MySQL 8.4.3 LTS,包括环境配置、安装步骤等步骤,对小白有一定的帮助,感兴趣的可以了解一下
    2024-11-11
  • MySQL字符编码设置方法

    MySQL字符编码设置方法

    这篇文章主要介绍了MySQL字符编码设置方法的相关资料,需要的朋友可以参考下
    2016-05-05
  • mysql 动态执行存储过程语句

    mysql 动态执行存储过程语句

    MSSQL中动态执行sql语句可以使用EXEC()函数。MSSQL中也有类似的函数EXECUTE(),不过不同的是MYSQL中动态执行存储过程语句与MSSQL还是有区别的。
    2009-07-07

最新评论