Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

13.1.6 数字类型属性

MySQL支持在括号中指定整数数据类型的显示宽度的扩展。例如,INT(4)指定了一个显示宽度为四位数字的INT。这个可选的显示宽度可能被应用程序用来显示小于列宽的整数值,通过左填充空格。(也就是说,这个宽度存在于结果集的元数据中。是否使用它取决于应用程序。)

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

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

Note

在表达式或UNION查询中,ZEROFILL属性将被忽略。

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

ZEROFILL属性对于数字数据类型已经弃用,如同整数数据类型的显示宽度属性一样。您应该期望在未来版本的MySQL中删除对ZEROFILL和整数数据类型显示宽度的支持。考虑使用替代方法来实现这些属性的效果。例如,应用程序可以使用LPAD()函数来将数字左填充到所需的宽度,或者它们可以在CHAR列中存储格式化的数字。

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

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

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

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

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

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

不支持 AUTO_INCREMENT 列中的负值。

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

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