梦幻天空

需要读完

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)

用[x]表示不大于x的最大整数_若计算机采用8位整数补码表示数据,则运算 将产生溢出_int表示的整数范围

2. 专注

在此处插入图片描述 VI. 概括

对于 Integer 类型,“Number”不限制它可以存储的最大范围。

DECIMAL(M,D)中,M为总长度,D为小数点后保留位数

对于字符字段,这是可以存储的最大字符数,例如 VARCHAR(20) 最多存储 20 个字符。

如果你误以为int(3)只能存储长度为3的数字,int(11)会存储长度为11的数字,这是错误的。 3和11不表示存储长度,只有字段指定zerofill(即补零时)才有用,左边用0`填充。 **

公众号|程序员总结文档