梦幻天空
需要读完
8个
分钟
速读只需4分钟
1. Mysql中的数值类型
!! 下图是Mysql支持的数值类型和取值范围
在此处插入图像描述
BIT[M] 位域类型,M表示每个值的位数,取值范围为1~64,如果忽略M,则默认为1
TINYINT[(M)] [UNSIGNED] [ZEROFILL] M 默认为 4int表示的整数范围,一个小整数。 有符号范围是 -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`。
2.有没有限制有什么区别
对于Integer类型,仅表示字段的显示宽度。
对于 DECIMAL 类型,表示数字的总数。
对于字符字段,这是可以存储的最大字符数,例如 VARCHAR(20) 可以存储 20 个字符。
显示宽度不影响可以存储在该列中的最大值。 int(5) 和 int(11) 可以存储的最大范围是相同的。
将字段设置为 INT(20) 并不意味着它将能够存储 20 位数字。 这个字段最终能存储的最大范围还是INT的范围。
3、有没有标志有什么区别?
那么问题来了,既然相加与不相加没有区别,何必呢?
!! “正常”情况下确实没有区别int表示的整数范围,只有当字段设置为 UNSIGNED ZEROFILL 属性时,INT 增加的数字才有意义。 指示如果要存储的数字少于 N 个字符,则数字将在左侧补零。
4、常用的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 个字符。
!! INT(11) 只有在列设置为 UNSIGNED ZEROFILL 时才有意义,这意味着如果要存储的数字少于 11 个字符,数字将在左侧用零填充。
5.简述Decimal(M,D)数据类型的用法
当我们需要存储小数并且有精度要求时,比如存储金额,我们通常会考虑使用DECIMAL字段类型。
一、简要说明
语法为 DECIMAL(M,D)
2. 专注
在此处插入图片描述 VI. 概括
对于 Integer 类型,“Number”不限制它可以存储的最大范围。
DECIMAL(M,D)中,M为总长度,D为小数点后保留位数
对于字符字段,这是可以存储的最大字符数,例如 VARCHAR(20) 最多存储 20 个字符。
如果你误以为int(3)只能存储长度为3的数字,int(11)会存储长度为11的数字,这是错误的。 3和11不表示存储长度,只有字段指定zerofill(即补零时)才有用,左边用0`填充。 **
公众号|程序员总结文档