一、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来填充`。**