文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  数值类型属性

13.1.6 数值类型属性

MySQL 支持一个扩展,可以选择性地在类型基关键字后面的括号中指定整数数据类型的显示宽度。例如,INT(4) 指定显示宽度为四位数的 INT。此可选显示宽度可由应用程序使用,以便通过在左侧填充空格来显示宽度小于列指定宽度的整数值。(也就是说,此宽度存在于结果集中返回的元数据中。是否使用它取决于应用程序。)

显示宽度会限制可以存储在列中的值的范围。它也不会阻止显示宽度大于列显示宽度的值正确显示。例如,指定为 SMALLINT(3) 的列具有通常的 SMALLINT 范围,即 -3276832767,并且超出三位数允许范围的值将使用超过三位数完整显示。

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

注意

对于涉及表达式或 UNION 查询的列,将忽略 ZEROFILL 属性。

如果在具有 ZEROFILL 属性的整数列中存储大于显示宽度的值,则当 MySQL 为某些复杂的联接生成临时表时,可能会遇到问题。在这些情况下,MySQL 假设数据值适合列显示宽度。

不建议对数值数据类型使用 ZEROFILL 属性,也不建议对整数数据类型使用显示宽度属性。您应该预料到在未来版本的 MySQL 中将删除对 ZEROFILL 和整数数据类型的显示宽度的支持。考虑使用其他方法来实现这些属性的效果。例如,应用程序可以使用 LPAD() 函数将数字零填充到所需的宽度,或者可以将格式化的数字存储在 CHAR 列中。

所有整数类型都可以有一个可选的(非标准)UNSIGNED 属性。无符号类型可用于仅允许列中存在非负数,或者当您需要为该列提供更大的数字上限范围时。例如,如果 INT 列为 UNSIGNED,则该列范围的大小是相同的,但其端点向上移动,从 -2147483648214748364704294967295

浮点数和定点数类型也可以是 UNSIGNED。与整数类型一样,此属性可防止在列中存储负值。与整数类型不同,列值的上限范围保持不变。不建议对 FLOATDOUBLEDECIMAL(及其任何同义词)类型的列使用 UNSIGNED,您应该预料到在未来版本的 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 模式。

插入 NULL 以生成 AUTO_INCREMENT 值要求将该列声明为 NOT NULL。如果该列声明为 NULL,则插入 NULL 将存储 NULL。当您将任何其他值插入到 AUTO_INCREMENT 列中时,该列将设置为该值,并且序列将重置,以便下一个自动生成的值按顺序跟随插入的值。

不支持 AUTO_INCREMENT 列的负值。

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

不建议对 FLOATDOUBLE 列使用 AUTO_INCREMENT;您应该预料到在未来版本的 MySQL 中将删除对它的支持。考虑从这些列中删除 AUTO_INCREMENT 属性,以避免潜在的兼容性问题,或者将它们转换为整数类型。