数值数据类型语法
对于整数数据类型,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属性不适用于类型为FLOAT,DOUBLE和和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]- 一个非常小的整数。签署的范围是 - -128到- 127。无符号的范围是- 0到- 255。
- BOOL,- BOOLEAN- 这些类型是的同义词 - 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 | +------------------------ +- 然而,这些值 - TRUE和- FALSE仅是别名- 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。
- SMALLINT[(M)][UNSIGNED][ZEROFILL]- 一个小整数。签署的范围是 - -32768到- 32767。无符号的范围是- 0到- 65535。
- MEDIUMINT[(M)][UNSIGNED][ZEROFILL]- 中型整数。签署的范围是 - -8388608到- 8388607。无符号的范围是- 0到- 16777215。
- INT[(M)][UNSIGNED][ZEROFILL]- 普通大小的整数。签署的范围是 - -2147483648到- 2147483647。无符号的范围是- 0到- 4294967295。
- INTEGER[(M)][UNSIGNED][ZEROFILL]- 此类型是的同义词 - INT。
- BIGINT[(M)][UNSIGNED][ZEROFILL]- 一个大整数。签署的范围是 - -9223372036854775808到- 9223372036854775807。无符号的范围是- 0到- 18446744073709551615。- SERIAL是的别名- BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE。- 关于 - BIGINT列,您应该注意以下几点:- 所有算术都是使用有符号 - BIGINT或- DOUBLE值完成的,因此- 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-38,- 0以及- 1.175494351E-38对- 3.402823466E +38。这些是基于IEEE标准的理论极限。实际范围可能会略小,具体取决于您的硬件或操作系统。- M是位数的总和,- D是小数点后的位数。如果- M和- D省略,则将值存储到硬件允许的极限。单精度浮点数的精度约为小数点后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- M或- Dvalues。如果- p是25到53,则数据类型将变为- DOUBLEno- M或- Dvalues。结果列的范围与本节前面介绍的单精度- FLOAT或双精度- DOUBLE数据类型相同。- UNSIGNED,如果指定,则不允许使用负值。从MySQL 8.0.17开始,- UNSIGNED不推荐使用类型- FLOAT(和任何同义词)类型的列的属性,并且在将来的MySQL版本中将不再支持该属性。考虑- CHECK对此类列使用简单约束。- FLOAT(p)提供了语法以实现ODBC兼容性。
- DOUBLE[(M,D)][UNSIGNED][ZEROFILL]- 普通大小(双精度)浮点数。允许值是 - -1.7976931348623157E +308对- -2.2250738585072014E-308,- 0以及- 2.2250738585072014E-308对- 1.7976931348623157E +308。这些是基于IEEE标准的理论极限。实际范围可能会略小,具体取决于您的硬件或操作系统。- M是位数的总和,- D是小数点后的位数。如果- M和- D省略,则将值存储到硬件允许的极限。双精度浮点数精确到大约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。
