共计 1794 个字符,预计需要花费 5 分钟才能阅读完成。
一、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 来填充 `。**
正文完