• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 数值数据类型语法

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

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

    从MySQL 8.0.17开始,对于整数数据类型,不建议使用display width属性,并且在将来的MySQL版本中将删除对它的支持。

    如果ZEROFILL为数字列指定,MySQL会自动将该UNSIGNED属性添加到该列。

    从MySQL 8.0.17开始,ZEROFILL不推荐使用数字数据类型的属性,并且在将来的MySQL版本中将不再支持该属性。考虑使用替代方法来产生此属性的效果。例如,应用程序可以使用该LPAD()功能对数字进行零填充以达到所需的宽度,或者可以将格式化的数字存储在CHAR列中。

    允许该UNSIGNED属性的数值数据类型也允许SIGNED。但是,这些数据类型默认情况下是签名的,因此该SIGNED属性无效。

    从MySQL 8.0.17开始,该UNSIGNED属性不适用于类型为FLOATDOUBLE和和DECIMAL(以及任何同义词)的列,并且在将来的MySQL版本中将不再支持该属性。考虑CHECK对此类列使用简单约束。

    SERIAL是的别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE

    SERIAL DEFAULT VALUE在整数列的定义中,是的别名NOT NULL AUTO_INCREMENT UNIQUE

    警告

    当您在类型为1的整数值之间使用减法时UNSIGNED,除非NO_UNSIGNED_SUBTRACTION启用了SQL模式,否则结果是无符号的。请参见“信息函数”。

    • BIT[(M)]

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

    • TINYINT[(M)][UNSIGNED][ZEROFILL]

      一个非常小的整数。签署的范围是-128127。无符号的范围是0255

    • BOOLBOOLEAN

      这些类型是的同义词TINYINT(1)。零值被认为是错误的。非零值被视为true:

      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                   	|
      +------------------------	+
      

      然而,这些值TRUEFALSE仅是别名10分别,如下所示:

      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

    • SMALLINT[(M)][UNSIGNED][ZEROFILL]

      一个小整数。签署的范围是-3276832767。无符号的范围是065535

    • MEDIUMINT[(M)][UNSIGNED][ZEROFILL]

      中型整数。签署的范围是-83886088388607。无符号的范围是016777215

    • INT[(M)][UNSIGNED][ZEROFILL]

      普通大小的整数。签署的范围是-21474836482147483647。无符号的范围是04294967295

    • INTEGER[(M)][UNSIGNED][ZEROFILL]

      此类型是的同义词INT

    • BIGINT[(M)][UNSIGNED][ZEROFILL]

      一个大整数。签署的范围是-92233720368547758089223372036854775807。无符号的范围是018446744073709551615

      SERIAL是的别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE

      关于BIGINT列,您应该注意以下几点:

      • 所有算术都是使用有符号BIGINTDOUBLE值完成的,因此9223372036854775807除位函数外,不要使用大于(63位)的无符号大整数!如果这样做,由于将BIGINT值转换为时的舍入错误,结果中的最后几位可能会出错DOUBLE

        MySQL BIGINT在以下情况下可以处理:

        • 使用整数将大的无符号值存储在BIGINT列中时。
        • 在或中,其中指的是列。MIN(col_name)MAX(col_name)col_nameBIGINT
        • 当使用操作符( +-*,等等),其中两个操作数都是整数。
      • 您始终可以BIGINT通过使用字符串将精确的整数值存储在列中。在这种情况下,MySQL执行的字符串到数字的转换不涉及中间的双精度表示形式。
      • - +*运营商使用BIGINT,当两个操作数是整数值运算。这意味着,如果您将两个大整数相乘(或返回整数的函数的结果),则当结果大于时,可能会得到意外的结果9223372036854775807
    • DECIMAL[(M[,D])][UNSIGNED][ZEROFILL]

      压缩的“精确”定点数字。M是位数的总数(精度),D是小数点后的位数(小数位数)。小数点和(对于负数)-符号不计入M。如果D为0,则值没有小数点或小数部分。的最大位数(M)为DECIMAL65。支持的小数位数(D)的最大值为30。如果D省略,则默认值为0。如果M省略,则默认值为10。

      UNSIGNED,如果指定,则不允许使用负值。从MySQL 8.0.17开始,UNSIGNED不推荐使用类型DECIMAL(和任何同义词)类型的列的属性,并且在将来的MySQL版本中将不再支持该属性。考虑CHECK对此类列使用简单约束。

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

    • DEC[(M[,D])][UNSIGNED][ZEROFILL],,NUMERIC[(M[,D])][UNSIGNED][ZEROFILL]FIXED[(M[,D])][UNSIGNED][ZEROFILL]

      这些类型是的同义词DECIMAL。该FIXED同义词可用于与其他数据库系统兼容。

    • FLOAT[(M,D)][UNSIGNED][ZEROFILL]

      一个小的(单精度)浮点数。允许值是-3.402823466E +38-1.175494351E-380以及1.175494351E-383.402823466E +38。这些是基于IEEE标准的理论极限。实际范围可能会略小,具体取决于您的硬件或操作系统。

      M是位数的总和,D是小数点后的位数。如果MD省略,则将值存储到硬件允许的极限。单精度浮点数的精度约为小数点后7位。

      FLOAT(M,D)是非标准的MySQL扩展。从MySQL 8.0.17开始,不推荐使用此语法,并且在将来的MySQL版本中将不再支持该语法。

      UNSIGNED,如果指定,则不允许使用负值。从MySQL 8.0.17开始,UNSIGNED不推荐使用类型FLOAT(和任何同义词)类型的列的属性,并且在将来的MySQL版本中将不再支持该属性。考虑CHECK对此类列使用简单约束。

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

    • FLOAT(p)[UNSIGNED][ZEROFILL]

      浮点数。p代表以位为单位的精度,但是MySQL仅使用此值来确定是使用FLOAT还是DOUBLE用于结果数据类型。如果p从0到24,则数据类型将变为FLOATno MDvalues。如果p是25到53,则数据类型将变为DOUBLEno MD values。结果列的范围与本节前面介绍的单精度FLOAT或双精度DOUBLE数据类型相同。

      UNSIGNED,如果指定,则不允许使用负值。从MySQL 8.0.17开始,UNSIGNED不推荐使用类型FLOAT(和任何同义词)类型的列的属性,并且在将来的MySQL版本中将不再支持该属性。考虑CHECK对此类列使用简单约束。

      FLOAT(p)提供了语法以实现ODBC兼容性。

    • DOUBLE[(M,D)][UNSIGNED][ZEROFILL]

      普通大小(双精度)浮点数。允许值是-1.7976931348623157E +308-2.2250738585072014E-3080以及2.2250738585072014E-3081.7976931348623157E +308。这些是基于IEEE标准的理论极限。实际范围可能会略小,具体取决于您的硬件或操作系统。

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

      DOUBLE(M,D)是非标准的MySQL扩展。从MySQL 8.0.17开始,不推荐使用此语法,并且在将来的MySQL版本中将不再支持该语法。

      UNSIGNED,如果指定,则不允许使用负值。从MySQL 8.0.17开始,UNSIGNED不推荐使用类型DOUBLE(和任何同义词)类型的列的属性,并且在将来的MySQL版本中将不再支持该属性。考虑CHECK对此类列使用简单约束。

    • DOUBLE PRECISION[(M,D)][UNSIGNED][ZEROFILL]REAL[(M,D)][UNSIGNED][ZEROFILL]

      这些类型是的同义词DOUBLE。例外:如果REAL_AS_FLOAT启用了 SQL模式,REAL则是FLOAT而不是的同义词DOUBLE