11.1.1 数值数据类型语法

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

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

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

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

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

整数列的定义中的SERIAL DEFAULT VALUENOT NULL AUTO_INCREMENT UNIQUE的别名。

Warning

当您在整数值为UNSIGNED的整数值之间使用减法时,除非启用了NO_UNSIGNED_SUBTRACTION SQL 模式,否则结果将是无符号的。参见第 12.10 节“Broadcast 函数和运算符”

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

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

这些类型是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

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

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

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

此类型是INT的同义词。

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

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

关于BIGINT列,您应该注意一些事项:

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

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

  • 使用整数将大的无符号值存储在BIGINT列中时。

    • MIN(col_name)MAX(col_name)中,其中* col_name *table 示BIGINT列。

    • 当使用两个操作数均为整数的运算符(+-*等)时。

    • 您始终可以通过使用字符串将精确的整数值存储在BIGINT列中。在这种情况下,MySQL 执行的字符串到数字的转换不涉及中间的双精度 table 示形式。

    • 当两个操作数均为整数值时,-+*运算符使用BIGINT算术。这意味着,如果将两个大整数(或返回整数的函数的结果)相乘,则结果大于9223372036854775807时,可能会得到意外的结果。

  • DECIMAL [(M [,D])] [未签名] [零填充]

打包的“精确”定点数。 * M 是位数(精度), D 是小数点后的位数(小数位数)。小数点和-符号(对于负数)不计入 M 。如果 D 为 0,则值没有小数点或小数部分。 DECIMAL的最大位数( M )为 65.支持的小数位数( D )的最大值为 30.如果省略 D ,则默认值为 0.如果省略 M *,则默认值是 10.(DECIMALLiterals 的文本长度也有限制;请参见第 12.22.3 节“table 达式处理”。)

UNSIGNED(如果已指定)不允许使用负值。

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

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

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

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

FLOAT(M,D)是非标准的 MySQL 扩展。

UNSIGNED(如果已指定)不允许使用负值。

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

浮点数。 * p table 示以位为单位的精度,但是 MySQL 仅使用此值来确定对结果数据类型使用FLOAT还是DOUBLE。如果 p 从 0 到 24,则数据类型将变为FLOAT,没有 M D 值。如果 p 从 25 到 53,则数据类型将变为DOUBLE,而没有 M D *值。结果列的范围与本节前面介绍的单精度FLOAT或双精度DOUBLE数据类型相同。

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

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

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

DOUBLE(M,D)是非标准的 MySQL 扩展。

UNSIGNED(如果已指定)不允许使用负值。

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