# 11.1.1数字数据类型语法

对于整数数据类型,*M*指示最大显示宽度。最大显示宽度为255。显示宽度与类型可以存储的值的范围无关,如中所述第11.1.6节,“数字类型属性”.

对于浮点和定点数据类型,*M*是可存储的总位数。

从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性;您应该期望在MySQL的未来版本中删除对它的支持。

如果你指定零填充对于数字列,MySQL会自动添加未签名属性添加到该列。

从MySQL 8.0.17开始零填充属性不推荐用于数字数据类型;您应该期望在MySQL的未来版本中删除对它的支持。考虑使用另一种方法来产生这个属性的效果。例如,应用程序可以使用LPAD()函数将焊盘编号归零至所需的宽度,也可以将格式化后的数字存储在烧焦柱。

允许未签名属性也允许签署。但是,这些数据类型在默认情况下是有符号的,因此签署属性没有效果。

从MySQL 8.0.17开始未签名属性不推荐用于类型为的列浮动, 双重的十进制的(以及任何同义词);您应该期望在MySQL的未来版本中删除对它的支持。考虑使用简单的检查而不是为此类列设置约束。

电视连续剧是的别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.

序列默认值在整数列的定义中,是非空自动增量唯一.

警告

当在整数值之间使用减法时,其中一个为未签名,除非无符号减法SQL模式已启用。看见第12.11节,“转换函数和运算符”.

  • 一点点[(*M*)]

    位值类型。*M指示每个值的位数,从1到64。如果有,默认值为1M*省略了。

  • TINYINT[(*M*)][未签名][零填充]

    一个非常小的整数。符号范围为-128127.无符号范围为0255.

  • 布尔, 布尔值

    这些类型是TINYINT(1).零的值被认为是错误的。非零值被认为是真的:

    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*)][未签名][零填充]

    一个小整数。符号范围为-3276832767.无符号范围为065535.

  • 中微子[(*M*)][未签名][零填充]

    一个中等大小的整数。符号范围为-83886088388607.无符号范围为016777215.

  • 智力[(*M*)][未签名][零填充]

    正常大小的整数。符号范围为-21474836482147483647.无符号范围为04294967295.

  • 整数[(*M*)][未签名][零填充]

    这种类型是国际的.

  • 比金[(*M*)][未签名][零填充]

    一个大整数。符号范围为-92233720368547758089223372036854775807.无符号范围为018446744073709551615.

    电视连续剧是的别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.

    你应该注意的一些关于比金柱:

    • 所有的算术都是用符号运算完成的比金双重的值,因此不应使用大于9223372036854775807(63位)位功能除外!如果这样做,结果中最后的一些数字可能是错误的,因为在转换数据时存在舍入错误比金价值观双重的.

      MySQL可以处理比金在下列情况下:

    • 您始终可以将精确的整数值存储在比金通过使用字符串存储列。在本例中,MySQL执行字符串到数字的转换,不涉及中间的双精度表示。

    • 这个-, +*操作员使用比金两个操作数都是整数值时的算术运算。这意味着,如果将两个大整数(或返回整数的函数的结果)相乘,当结果大于9223372036854775807.

  • 小数点[(*M*[,*D*])][未签名][零填充]

    一个压缩的“精确”定点数字。M是总位数(精度)和D小数点后的位数(刻度)。小数点和(对于负数)-符号不算在内M如果D为0时,值没有小数点或小数部分。最大位数(M)因为十进制的她65岁。支持的最大小数位数(D)30岁。如果*D如果省略,则默认值为0。如果M*省略,默认值为10。(对文本的长度也有限制。)十进制的文字可以是;看见第12.25.3节“表达式处理”.)

    未签名,如果指定,则不允许负值。从MySQL 8.0.17开始未签名属性不推荐用于类型为的列十进制的(以及任何同义词);您应该期望在MySQL的未来版本中删除对它的支持。考虑使用简单的检查而不是为此类列设置约束。

    所有的基本计算(+, -, *, /)与十进制的列的精度为65位。

  • 十二月[(*M*[,*D*])][未签名][零填充], 数字的[(*M*[,*D*])][未签名][零填充], 固定的[(*M*[,*D*])][未签名][零填充]

    这些类型是十进制的这个固定的同义词可与其他数据库系统兼容。

  • 漂浮[(*M*,*D*)][未签名][零填充]

    一个小的(单精度)浮点数。允许值为-3.4028234666E+38-1.175494351E-38, 01.175494351E-383.4028234666E+38这些是基于IEEE标准的理论极限。根据硬件或操作系统的不同,实际范围可能会稍小一些。

    *M是数字和的总数D小数点后的位数。如果MD*如果省略,则将值存储到硬件允许的限制范围内。单精度浮点数精确到大约7位小数。

    漂浮(*M*,*D*)是一个非标准的MySQL扩展。从MySQL 8.0.17开始,这种语法已被弃用,您应该期待在未来的MySQL版本中删除对它的支持。

    未签名,如果指定,则不允许负值。从MySQL 8.0.17开始未签名属性不推荐用于类型为的列浮动(以及任何同义词),您应该期望在未来的MySQL版本中删除对它的支持。考虑使用简单的检查而不是为此类列设置约束。

    使用浮动可能会给您带来一些意想不到的问题,因为MySQL中的所有计算都是以双精度完成的。看见第B.3.4.7节,“解决没有匹配行的问题”.

  • 漂浮(*p*)[未签名][零填充]

    浮点数。*p以位表示精度,但MySQL仅使用此值来确定是否使用浮动双重的用于生成的数据类型。如果p从0到24,数据类型变为浮动没有MD价值观如果p从25到53,数据类型变为双重的没有MD*价值观结果列的范围与单个精度的范围相同浮动还是双精度双重的本节前面介绍的数据类型。

    未签名,如果指定,则不允许负值。从MySQL 8.0.17开始未签名属性不推荐用于类型为的列浮动(以及任何同义词),您应该期望在未来的MySQL版本中删除对它的支持。考虑使用简单的检查而不是为此类列设置约束。

    漂浮(*p*)提供语法是为了实现ODBC兼容性。

  • 加倍[(*M*,*D*)][未签名][零填充]

    正常大小(双精度)的浮点数。允许值为-1.7976931348623157E+308-2.2250738585072014E-308, 02.2250738585072014E-3081.7976931348623157E+308这些是基于IEEE标准的理论极限。根据硬件或操作系统的不同,实际范围可能会稍小一些。

    *M是数字和的总数D小数点后的位数。如果MD*如果省略,则将值存储到硬件允许的限制范围内。双精度浮点数精确到大约15位小数。

    加倍(*M*,*D*)是一个非标准的MySQL扩展。从MySQL 8.0.17开始,这种语法已被弃用,您应该期待在MySQL的未来版本中删除对它的支持。

    未签名,如果指定,则不允许负值。从MySQL 8.0.17开始未签名属性不推荐用于类型为的列双重的(以及任何同义词),您应该期望在未来的MySQL版本中删除对它的支持。考虑使用简单的检查而不是为此类列设置约束。

  • 双精度[(*M*,*D*)][未签名][零填充], 真的吗[(*M*,*D*)][未签名][零填充]

    这些类型是双重的.例外情况:如果真正的_AS_FLOATSQL模式已启用,真实的是的同义词浮动而不是双重的.