### 11.1.1数字数据类型语法 [](<>)[](<>)[](<>) 对于整数数据类型,*`M`*指示最大显示宽度。最大显示宽度为255。显示宽度与类型可以存储的值的范围无关,如中所述[第11.1.6节,“数字类型属性”](numeric-type-attributes.html). 对于浮点和定点数据类型,*`M`*是可存储的总位数。 从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性;您应该期望在MySQL的未来版本中删除对它的支持。 如果你指定`零填充`对于数字列,MySQL会自动添加`未签名`属性添加到该列。 从MySQL 8.0.17开始`零填充`属性不推荐用于数字数据类型;您应该期望在MySQL的未来版本中删除对它的支持。考虑使用另一种方法来产生这个属性的效果。例如,应用程序可以使用[`LPAD()`](string-functions.html#function_lpad)函数将焊盘编号归零至所需的宽度,也可以将格式化后的数字存储在[`烧焦`](char.html)柱。 允许`未签名`属性也允许`签署`。但是,这些数据类型在默认情况下是有符号的,因此`签署`属性没有效果。 从MySQL 8.0.17开始`未签名`属性不推荐用于类型为的列[`浮动`](floating-point-types.html), [`双重的`](floating-point-types.html)和[`十进制的`](fixed-point-types.html)(以及任何同义词);您应该期望在MySQL的未来版本中删除对它的支持。考虑使用简单的`检查`而不是为此类列设置约束。 `电视连续剧`是的别名`BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE`. `序列默认值`在整数列的定义中,是`非空自动增量唯一`. 警告 当在整数值之间使用减法时,其中一个为`未签名`,除非[`无符号减法`](sql-mode.html#sqlmode_no_unsigned_subtraction)SQL模式已启用。看见[第12.11节,“转换函数和运算符”](cast-functions.html). - [](<>) [](<>) [`一点点[(*`M`*)]`](bit-type.html) 位值类型。*`M`*指示每个值的位数,从1到64。如果有,默认值为1*`M`*省略了。 - [](<>) [](<>) [`TINYINT[(*`M`*)][未签名][零填充]`](integer-types.html) 一个非常小的整数。符号范围为`-128`到`127`.无符号范围为`0`到`255`. - [](<>) [](<>) [](<>) [](<>) [`布尔`](integer-types.html), [`布尔值`](integer-types.html) 这些类型是[`TINYINT(1)`](integer-types.html).零的值被认为是错误的。非零值被认为是真的: ``` mysql> SELECT IF(0, 'true', 'false'); +------------------------+ | IF(0, 'true', 'false') | +------------------------+ | false | +------------------------+ mysql> SELECT IF(1, 'true', 'false'); +------------------------+ | IF(1, 'true', 'false') | +------------------------+ | true | +------------------------+ mysql> SELECT IF(2, 'true', 'false'); +------------------------+ | IF(2, 'true', 'false') | +------------------------+ | true | +------------------------+ ``` 然而,价值观`符合事实的`和`错误的`不过是你的化名而已`1.`和`0`,分别如下所示: ``` mysql> SELECT IF(0 = FALSE, 'true', 'false'); +--------------------------------+ | IF(0 = FALSE, 'true', 'false') | +--------------------------------+ | true | +--------------------------------+ mysql> SELECT IF(1 = TRUE, 'true', 'false'); +-------------------------------+ | IF(1 = TRUE, 'true', 'false') | +-------------------------------+ | true | +-------------------------------+ mysql> SELECT IF(2 = TRUE, 'true', 'false'); +-------------------------------+ | IF(2 = TRUE, 'true', 'false') | +-------------------------------+ | false | +-------------------------------+ mysql> SELECT IF(2 = FALSE, 'true', 'false'); +--------------------------------+ | IF(2 = FALSE, 'true', 'false') | +--------------------------------+ | false | +--------------------------------+ ``` 最后两条语句显示了显示的结果,因为`2.`两者都不相等`1.`也没有`0`. - [](<>) [](<>) [`斯莫林[(*`M`*)][未签名][零填充]`](integer-types.html) 一个小整数。符号范围为`-32768`到`32767`.无符号范围为`0`到`65535`. - [](<>) [](<>) [`中微子[(*`M`*)][未签名][零填充]`](integer-types.html) 一个中等大小的整数。符号范围为`-8388608`到`8388607`.无符号范围为`0`到`16777215`. - [](<>) [](<>) [`智力[(*`M`*)][未签名][零填充]`](integer-types.html) 正常大小的整数。符号范围为`-2147483648`到`2147483647`.无符号范围为`0`到`4294967295`. - [](<>) [](<>) [`整数[(*`M`*)][未签名][零填充]`](integer-types.html) 这种类型是[`国际的`](integer-types.html). - [](<>) [](<>) [](<>) [`比金[(*`M`*)][未签名][零填充]`](integer-types.html) 一个大整数。符号范围为`-9223372036854775808`到`9223372036854775807`.无符号范围为`0`到`18446744073709551615`. `电视连续剧`是的别名`BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE`. 你应该注意的一些关于[`比金`](integer-types.html)柱: - [](<>)所有的算术都是用符号运算完成的[`比金`](integer-types.html)或[`双重的`](floating-point-types.html)值,因此不应使用大于`9223372036854775807`(63位)位功能除外!如果这样做,结果中最后的一些数字可能是错误的,因为在转换数据时存在舍入错误[`比金`](integer-types.html)价值观[`双重的`](floating-point-types.html). MySQL可以处理[`比金`](integer-types.html)在下列情况下: - 当使用整数将大的无符号值存储在[`比金`](integer-types.html)柱 - 在里面[`闵(*`上校的名字`*)`](aggregate-functions.html#function_min)或[`麦克斯(*`上校的名字`*)`](aggregate-functions.html#function_max)哪里*`上校的名字`*指的是[`比金`](integer-types.html)柱 - 使用运算符时([`+`](arithmetic-functions.html#operator_plus), [`-`](arithmetic-functions.html#operator_minus), [`*`](arithmetic-functions.html#operator_times),等等),其中两个操作数都是整数。 - 您始终可以将精确的整数值存储在[`比金`](integer-types.html)通过使用字符串存储列。在本例中,MySQL执行字符串到数字的转换,不涉及中间的双精度表示。 - 这个[`-`](arithmetic-functions.html#operator_minus), [`+`](arithmetic-functions.html#operator_plus)和[`*`](arithmetic-functions.html#operator_times)操作员使用[`比金`](integer-types.html)两个操作数都是整数值时的算术运算。这意味着,如果将两个大整数(或返回整数的函数的结果)相乘,当结果大于`9223372036854775807`. - [](<>) [](<>) [`小数点[(*`M`*[,*`D`*])][未签名][零填充]`](fixed-point-types.html) 一个压缩的“精确”定点数字。*`M`*是总位数(精度)和*`D`*小数点后的位数(刻度)。小数点和(对于负数)`-`符号不算在内*`M`*如果*`D`*为0时,值没有小数点或小数部分。最大位数(*`M`*)因为[`十进制的`](fixed-point-types.html)她65岁。支持的最大小数位数(*`D`*)30岁。如果*`D`*如果省略,则默认值为0。如果*`M`*省略,默认值为10。(对文本的长度也有限制。)[`十进制的`](fixed-point-types.html)文字可以是;看见[第12.25.3节“表达式处理”](precision-math-expressions.html).) `未签名`,如果指定,则不允许负值。从MySQL 8.0.17开始`未签名`属性不推荐用于类型为的列[`十进制的`](fixed-point-types.html)(以及任何同义词);您应该期望在MySQL的未来版本中删除对它的支持。考虑使用简单的`检查`而不是为此类列设置约束。 所有的基本计算(`+, -, *, /`)与[`十进制的`](fixed-point-types.html)列的精度为65位。 - [](<>) [](<>) [](<>) [](<>) [](<>) [](<>) [`十二月[(*`M`*[,*`D`*])][未签名][零填充]`](fixed-point-types.html), [`数字的[(*`M`*[,*`D`*])][未签名][零填充]`](fixed-point-types.html), [`固定的[(*`M`*[,*`D`*])][未签名][零填充]`](fixed-point-types.html) 这些类型是[`十进制的`](fixed-point-types.html)这个[`固定的`](fixed-point-types.html)同义词可与其他数据库系统兼容。 - [](<>) [](<>) [`漂浮[(*`M`*,*`D`*)][未签名][零填充]`](floating-point-types.html) 一个小的(单精度)浮点数。允许值为`-3.4028234666E+38`到`-1.175494351E-38`, `0`和`1.175494351E-38`到`3.4028234666E+38`这些是基于IEEE标准的理论极限。根据硬件或操作系统的不同,实际范围可能会稍小一些。 *`M`*是数字和的总数*`D`*小数点后的位数。如果*`M`*和*`D`*如果省略,则将值存储到硬件允许的限制范围内。单精度浮点数精确到大约7位小数。 `漂浮(*`M`*,*`D`*)`是一个非标准的MySQL扩展。从MySQL 8.0.17开始,这种语法已被弃用,您应该期待在未来的MySQL版本中删除对它的支持。 `未签名`,如果指定,则不允许负值。从MySQL 8.0.17开始`未签名`属性不推荐用于类型为的列[`浮动`](floating-point-types.html)(以及任何同义词),您应该期望在未来的MySQL版本中删除对它的支持。考虑使用简单的`检查`而不是为此类列设置约束。 使用[`浮动`](floating-point-types.html)可能会给您带来一些意想不到的问题,因为MySQL中的所有计算都是以双精度完成的。看见[第B.3.4.7节,“解决没有匹配行的问题”](no-matching-rows.html). - [](<>) [](<>) [](<>) [`漂浮(*`p`*)[未签名][零填充]`](floating-point-types.html) 浮点数。*`p`*以位表示精度,但MySQL仅使用此值来确定是否使用[`浮动`](floating-point-types.html)或[`双重的`](floating-point-types.html)用于生成的数据类型。如果*`p`*从0到24,数据类型变为[`浮动`](floating-point-types.html)没有*`M`*或*`D`*价值观如果*`p`*从25到53,数据类型变为[`双重的`](floating-point-types.html)没有*`M`*或*`D`*价值观结果列的范围与单个精度的范围相同[`浮动`](floating-point-types.html)还是双精度[`双重的`](floating-point-types.html)本节前面介绍的数据类型。 `未签名`,如果指定,则不允许负值。从MySQL 8.0.17开始`未签名`属性不推荐用于类型为的列[`浮动`](floating-point-types.html)(以及任何同义词),您应该期望在未来的MySQL版本中删除对它的支持。考虑使用简单的`检查`而不是为此类列设置约束。 [](<>) [](<>) [`漂浮(*`p`*)`](floating-point-types.html)提供语法是为了实现ODBC兼容性。 - [](<>) [](<>) [](<>) [](<>) [`加倍[(*`M`*,*`D`*)][未签名][零填充]`](floating-point-types.html) 正常大小(双精度)的浮点数。允许值为`-1.7976931348623157E+308`到`-2.2250738585072014E-308`, `0`和`2.2250738585072014E-308`到`1.7976931348623157E+308`这些是基于IEEE标准的理论极限。根据硬件或操作系统的不同,实际范围可能会稍小一些。 *`M`*是数字和的总数*`D`*小数点后的位数。如果*`M`*和*`D`*如果省略,则将值存储到硬件允许的限制范围内。双精度浮点数精确到大约15位小数。 `加倍(*`M`*,*`D`*)`是一个非标准的MySQL扩展。从MySQL 8.0.17开始,这种语法已被弃用,您应该期待在MySQL的未来版本中删除对它的支持。 `未签名`,如果指定,则不允许负值。从MySQL 8.0.17开始`未签名`属性不推荐用于类型为的列[`双重的`](floating-point-types.html)(以及任何同义词),您应该期望在未来的MySQL版本中删除对它的支持。考虑使用简单的`检查`而不是为此类列设置约束。 - [](<>) [](<>) [](<>) [](<>) [`双精度[(*`M`*,*`D`*)][未签名][零填充]`](floating-point-types.html), [`真的吗[(*`M`*,*`D`*)][未签名][零填充]`](floating-point-types.html) 这些类型是[`双重的`](floating-point-types.html).例外情况:如果[`真正的_AS_FLOAT`](sql-mode.html#sqlmode_real_as_float)SQL模式已启用,[`真实的`](floating-point-types.html)是的同义词[`浮动`](floating-point-types.html)而不是[`双重的`](floating-point-types.html).