数值类型属性
MySQL支持扩展,可以选择在整数类型的基本关键字之后的括号中指定整数数据类型的显示宽度。例如,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
不推荐使用数字数据类型的属性,也不推荐使用整数数据类型的display width属性。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
从此类列中删除属性,或将其转换为整数类型。