MySQL 支持一个扩展,用于在类型的 base 关键字后面的括号中选择性地指定整数数据类型的显示宽度。例如, INT(4)
指定 INT
显示宽度为四位数的 。应用程序可以使用此可选的显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。(也就是说,这个宽度存在于结果集返回的元数据中。是否使用取决于应用程序。)
显示宽度也没有限制,可以被存储在列中的值的范围内。它也不会阻止比列显示宽度更宽的值正确显示。例如,指定为的列 SMALLINT(3)
的通常 SMALLINT
范围为-32768
to 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 开始,该 UNSIGNED
属性对于类型为FLOAT
、 DOUBLE
和 DECIMAL
(以及任何同义词)的列已弃用,您应该期望在未来版本的 MySQL 中删除对它的支持。考虑CHECK
对此类列使用简单 约束。
如果您ZEROFILL
为数字列指定,MySQL 会自动添加该UNSIGNED
属性。
整数或浮点数据类型可以具有该 AUTO_INCREMENT
属性。当您将 的值NULL
插入索引 AUTO_INCREMENT
列时,该列被设置为下一个序列值。通常这是 *
value*+1
,其中 *value
*是表中当前列的最大值。(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
从这些列中删除属性,或将它们转换为整数类型。