对于整数数据类型,M 表示最小显示宽度。最大显示宽度为 255。显示宽度与类型可以存储的值的范围无关,如第 13.1.6 节,“数值类型属性” 中所述。
对于浮点和定点数据类型,M 是可以存储的总位数。
对于整数数据类型,显示宽度属性已弃用;您应该期望在未来版本的 MySQL 中删除对其的支持。
如果为数值列指定 ZEROFILL,MySQL 会自动向该列添加 UNSIGNED 属性。
对于数值数据类型,ZEROFILL 属性已弃用;您应该期望在未来版本的 MySQL 中删除对其的支持。考虑使用其他方法来产生此属性的效果。例如,应用程序可以使用 LPAD() 函数将数字零填充到所需的宽度,或者它们可以将格式化的数字存储在 CHAR 列中。
允许使用 UNSIGNED 属性的数值数据类型也允许使用 SIGNED。但是,这些数据类型默认情况下是有符号的,因此 SIGNED 属性没有效果。
对于 FLOAT、DOUBLE 和 DECIMAL(以及任何同义词)类型的列,UNSIGNED 属性已弃用;您应该期望在未来版本的 MySQL 中删除对其的支持。对于此类列,请考虑使用简单的 CHECK 约束。
SERIAL 是 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的别名。
在整数列的定义中,SERIAL DEFAULT VALUE 是 NOT NULL AUTO_INCREMENT UNIQUE 的别名。
当您在整数之间使用减法运算时,其中一个为 UNSIGNED 类型,除非启用了 NO_UNSIGNED_SUBTRACTION SQL 模式,否则结果将为无符号。请参见第 14.10 节,“强制转换函数和运算符”.
位值类型。
M表示每个值的位数,从 1 到 64。如果省略了M,则默认值为 1。TINYINT[(M)] [UNSIGNED] [ZEROFILL]非常小的整数。有符号范围为
-128到127。无符号范围为0到255。这些类型是
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 | +------------------------+但是,值
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_name指的是BIGINT列。
您始终可以通过使用字符串存储,将精确的整数值存储在
BIGINT列中。在这种情况下,MySQL 会执行字符串到数字的转换,该转换不涉及任何中间双精度表示。-、+和*运算符在两个操作数均为整数值时使用BIGINT算术运算。这意味着,如果您将两个大整数(或返回整数的函数的结果)相乘,当结果大于9223372036854775807时,您可能会得到意外的结果。
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]打包的 “精确” 定点数。
M是总位数(精度),D是小数点后的位数(比例)。小数点和(对于负数)-符号不计入M。如果D为 0,则值没有小数点或小数部分。DECIMAL的最大位数 (M) 为 65。支持的最大小数位数 (D) 为 30。如果省略D,则默认值为 0。如果省略M,则默认值为 10。(DECIMAL文字的文本长度也有限制;请参见 第 14.24.3 节“表达式处理”。)如果指定了
UNSIGNED,则不允许负值。UNSIGNED属性已弃用,不适用于类型为DECIMAL(以及任何同义词)的列;您应该预期它在 MySQL 的未来版本中会被删除。对于此类列,请考虑使用简单的CHECK约束。所有使用
DECIMAL列的基本计算(+, -, *, /)都以 65 位的精度进行。DEC[(、M[,D])] [UNSIGNED] [ZEROFILL]NUMERIC[(、M[,D])] [UNSIGNED] [ZEROFILL]FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]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(是 MySQL 的非标准扩展。此语法已弃用,您应该预期它在 MySQL 的未来版本中会被删除。M,D)如果指定了
UNSIGNED,则不允许负值。UNSIGNED属性已弃用,不适用于类型为FLOAT(以及任何同义词)的列,您应该预期它在 MySQL 的未来版本中会被删除。对于此类列,请考虑使用简单的CHECK约束。使用
FLOAT可能会导致一些意想不到的问题,因为 MySQL 中的所有计算都是用双精度进行的。请参见 第 B.3.4.7 节“解决没有匹配行的问题”。FLOAT(p) [UNSIGNED] [ZEROFILL]一个浮点数。
p表示位精度,但 MySQL 仅使用此值来确定是否使用FLOAT或DOUBLE作为结果数据类型。如果p介于 0 到 24 之间,则数据类型将变为FLOAT,且没有M或D值。如果p介于 25 到 53 之间,则数据类型将变为DOUBLE,且没有M或D值。结果列的范围与本节前面介绍的单精度FLOAT或双精度DOUBLE数据类型相同。如果指定了
UNSIGNED,则不允许负值。UNSIGNED属性已弃用,不适用于类型为FLOAT(以及任何同义词)的列,您应该预期它在 MySQL 的未来版本中会被删除。对于此类列,请考虑使用简单的CHECK约束。FLOAT(语法是为了 ODBC 兼容性提供的。p)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(是 MySQL 的非标准扩展;并且已弃用。您应该预期此语法在 MySQL 的未来版本中会被删除。M,D)如果指定了
UNSIGNED,则不允许负值。UNSIGNED属性已弃用,不适用于类型为DOUBLE(以及任何同义词)的列,您应该预期它在 MySQL 的未来版本中会被删除。对于此类列,请考虑使用简单的CHECK约束。DOUBLE PRECISION[(、M,D)] [UNSIGNED] [ZEROFILL]REAL[(M,D)] [UNSIGNED] [ZEROFILL]这些类型是
DOUBLE的同义词。例外:如果启用了REAL_AS_FLOATSQL 模式,REAL将是FLOAT的同义词,而不是DOUBLE。