### 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).
