MySQL 支持一个扩展,可以在类型的基本关键字后面的括号中选择性地指定整数数据类型的显示宽度。例如,
INT(4)
指定 an
INT
的显示宽度为四位。应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。(也就是说,这个宽度存在于随结果集返回的元数据中。是否使用它取决于应用程序。)
显示宽度不限制可以存储在列中的值的范围。它也不会阻止正确显示比列显示宽度宽的值。例如,指定为 的列
SMALLINT(3)
的通常
SMALLINT
范围为
-32768
到32767
,超出三位数允许范围的值将使用多于三位数完整显示。
当与可选(非标准)
ZEROFILL
属性一起使用时,默认的空格填充将替换为零。例如,对于声明为 的列,将检索为
INT(4) ZEROFILL
的值。
5
0005
对于表达式或查询
ZEROFILL
中涉及的列,
该属性将被忽略。UNION
如果您在具有该属性的整数列中存储大于显示宽度的值,则ZEROFILL
当 MySQL 为某些复杂的连接生成临时表时,您可能会遇到问题。在这些情况下,MySQL 假定数据值适合列显示宽度。
从 MySQL 8.0.17 开始,ZEROFILL
不推荐使用数字数据类型的属性,整数数据类型的显示宽度属性也是如此。ZEROFILL
您应该期望在未来版本的 MySQL 中删除对整数数据类型的支持
和显示宽度。考虑使用替代方法来产生这些属性的效果。例如,应用程序可以使用该
LPAD()
函数将数字补零到所需的宽度,或者它们可以将格式化后的数字存储在CHAR
列中。
所有整数类型都可以有一个可选的(非标准的)
UNSIGNED
属性。无符号类型可用于在一列中仅允许非负数,或者当您需要该列的较大数值范围上限时。例如,如果列为 ,则INT
列
UNSIGNED
范围的大小相同,但其端点向上移动,
从
到-2147483648
和。
2147483647
0
4294967295
浮点和定点类型也可以是
UNSIGNED
. 对于整数类型,此属性可防止负值存储在列中。与整数类型不同,列值的上限范围保持不变。从 MySQL 8.0.17 开始,
不推荐使用,
, and
(以及任何同义词)UNSIGNED
类型的列的属性,您应该期望在 MySQL 的未来版本中删除对它的支持。考虑对此类列使用简单的
约束。
FLOAT
DOUBLE
DECIMAL
CHECK
如果您ZEROFILL
为数字列指定,MySQL 会自动添加该UNSIGNED
属性。
整数或浮点数据类型可以具有该
AUTO_INCREMENT
属性。当您将值NULL
插入索引
AUTO_INCREMENT
列时,该列将设置为下一个序列值。通常为
,其中
value
+1value
是表中当前列的最大值。(AUTO_INCREMENT
序列以 . 开头
1
)
除非
启用了 SQL 模式
,否则
存储0
到
AUTO_INCREMENT
列中与存储具有相同的效果。NULL
NO_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
不推荐使用FLOAT
和
DOUBLE
列的支持;你应该期望它会在未来版本的 MySQL 中被删除。考虑AUTO_INCREMENT
从此类列中删除属性,或将它们转换为整数类型。