欢迎投稿

今日深度:

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

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


目录
  • 一、Mysql中数值类型
  • 二、有无限制的区别是什么
  • 三、有无符号的区别是什么
  • 四、常用的int(11)代表什么意思
  • 五、简述Decimal(M,D)数据类型用法
    • 1.简述
    • 2.重点
  • 六、总结

    一、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数值字段类型长度的资料请关注PHP之友其它相关文章!

    您可能感兴趣的文章:
    • mysql enum字段类型的谨慎使用
    • MySQL中字段类型为longtext的值导出后显示二进制串方式
    • MySQL如何修改字段类型和字段长度
    • Mysql修改字段名和修改字段类型的实例代码
    • mysql5.7 新增的json字段类型用法实例分析
    • mysql查询字段类型为json时的两种查询方式

    www.htsjk.Com true http://www.htsjk.com/Mysql/46928.html NewsArticle MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解, 目录 一、Mysql中数值类型 二、有无限制的区别是什么 三、有无符号的区别是什么 四、常用的int(11)代表什么意思 五、简述Decima...
    评论暂时关闭