Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Numeric Type Attributes

13.1.6 数值类型属性

MySQL 支持一个可选的扩展,用于在数据类型名称后面指定整数数据类型的显示宽度。在括号内指定的显示宽度可以由应用程序使用来显示值宽度小于列中指定宽度的整数值。例如,INT(4) 指定了一个 INT 类型,其显示宽度为四位数。这个可选的显示宽度可能会被应用程序用于左对齐整数值,使其填充到指定宽度中。该宽度在返回结果集的元数据中存在,但是否使用它取决于应用程序。

显示宽度并不限制存储在列中的值的范围,也不会阻止显示宽度超过列显示宽度的值被正确显示。例如,一个指定为 SMALLINT(3)SMALLINT 类型的范围是 -3276832767,而值超出三位数范围则会以更长的数字形式显示。

在与可选(非标准)的 ZEROFILL 属性一起使用时,默认的填充空格被替换为零。例如,对于一个声明为 INT(4) ZEROFILL 的列,值 5 将被检索为 0005

Note

属性 ZEROFILL 在表达式或 UNION 查询中涉及的列上被忽略。

如果在一个具有 ZEROFILL 属性的整数列中存储了比显示宽度更大的值,MySQL 在生成用于某些复杂连接的临时表时可能会遇到问题。在这些情况下,MySQL 假定数据值可以适应列的显示宽度。

属性 ZEROFILL 对于数值类型已被弃用,同样,对于整数类型的显示宽度也已被弃用。您应该预期在未来版本的 MySQL 中支持这些属性将会被移除。考虑使用替代方法来实现这些属性的效果。例如,应用程序可以使用 LPAD() 函数来对数字进行零填充直至所需宽度,或将格式化后的数字存储在 CHAR 列中。

所有整数类型都可以有一个可选(非标准)的 UNSIGNED 属性。一个无符号类型可以用于在列或当您需要更大的上限数字范围时限制只允许非负数值。例如,如果一个 INT 列是 UNSIGNED,该列的范围大小保持不变,但其端点向上移动,从 -2147483648214748364704294967295

浮点数和定点数类型也可以是 UNSIGNED。与整数类型不同,这个属性不改变列值的范围上限。属性 UNSIGNED 对于类型 FLOATDOUBLEDECIMAL(及其同义词)已被弃用,您应该预期在未来版本的 MySQL 中支持它将会被移除。考虑使用简单的 CHECK 约束代替这样的列。

如果您指定了 ZEROFILL 为数值列,MySQL 将自动添加 UNSIGNED 属性。

整数或浮点型数据类型可以拥有 AUTO_INCREMENT 属性。当你将 NULL 值插入一个索引的 AUTO_INCREMENT 列时,该列会被设置为下一个序列值。通常,这是 value+1,其中 value 是当前表中该列的最大值。(AUTO_INCREMENT 序列从 1 开始。)

0 存储到一个 AUTO_INCREMENT 列中与存储 NULL 有相同的效果,除非启用了 NO_AUTO_VALUE_ON_ZERO SQL 模式。

生成 AUTO_INCREMENT 值时插入 NULL 需要该列被声明为 NOT NULL。如果列被声明为 NULL,则插入 NULL 会存储一个 NULL。当你将任何其他值插入到一个 AUTO_INCREMENT 列中时,该列会被设置为该值,并且序列重置,以便下一次自动生成的值顺序地从插入的值之后开始。

AUTO_INCREMENT 列中的负值不受支持。

CHECK 约束不能引用具有 AUTO_INCREMENT 属性的列,也不能将 AUTO_INCREMENT 属性添加到用于 CHECK 约束的现有列中。

AUTO_INCREMENT 对于 FLOATDOUBLE 列已被弃用;你应该预期将来版本的 MySQL 中对其支持的移除。考虑从这样的列中移除 AUTO_INCREMENT 属性,以避免潜在的兼容性问题,或者将它们转换为整数类型。