Documentation Home
MySQL 8.0 参考手册  / 第 11 章数据类型  / 11.1 数值数据类型  /  11.1.6 数值类型属性

11.1.6 数值类型属性

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

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

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

笔记

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

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

从 MySQL 8.0.17 开始,ZEROFILL不推荐使用数字数据类型的属性,整数数据类型的显示宽度属性也是如此。ZEROFILL您应该期望在未来版本的 MySQL 中删除对整数数据类型的支持 和显示宽度。考虑使用替代方法来产生这些属性的效果。例如,应用程序可以使用该 LPAD()函数将数字补零到所需的宽度,或者它们可以将格式化后的数字存储在CHAR列中。

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

浮点和定点类型也可以是 UNSIGNED. 对于整数类型,此属性可防止负值存储在列中。与整数类型不同,列值的上限范围保持不变。从 MySQL 8.0.17 开始, 不推荐使用, , and (以及任何同义词)UNSIGNED类型的列的属性,您应该期望在 MySQL 的未来版本中删除对它的支持。考虑对此类列使用简单的 约束。 FLOATDOUBLEDECIMALCHECK

如果您ZEROFILL为数字列指定,MySQL 会自动添加该UNSIGNED 属性。

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

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

插入NULL以生成 AUTO_INCREMENT值需要声明该列NOT NULL。如果该列已声明NULL,插入将 NULL存储一个NULL. 当您将任何其他值插入 AUTO_INCREMENT列时,该列将设置为该值并重置序列,以便下一个自动生成的值按顺序从插入的值开始。

AUTO_INCREMENT不支持列的 负值。

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

从 MySQL 8.0.17 开始,AUTO_INCREMENT不推荐使用FLOATDOUBLE列的支持;你应该期望它会在未来版本的 MySQL 中被删除。考虑AUTO_INCREMENT从此类列中删除属性,或将它们转换为整数类型。