乐趣区

关于java:MySQL数据库中数值字段类型长度int11和DecimalMD详解

一、Mysql 中数值类型

下图为 Mysql 反对的 数值类型 及取值范畴


  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)

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

2. 重点

六、总结

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