11.1.6 数值类型属性
MySQL 支持扩展,可以选择在整数类型的基本关键字之后的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位数的INT。应用程序可以使用此可选的显示宽度来显示整数值,该整数值的宽度小于为列指定的宽度,方法是用空格左键填充它们。 (也就是说,此宽度存在于结果集返回的元数据中.是否使用该宽度取决于应用程序.)
显示宽度不限制可以存储在列中的值的范围。也不会阻止宽于列显示宽度的值正确显示。例如,指定为SMALLINT(3)的列通常具有-32768
到32767
的SMALLINT范围,并且使用三位以上的数字完整显示三位数所允许的范围之外的值。
与可选的(非标准)ZEROFILL
属性结合使用时,默认的空格填充将替换为零。例如,对于声明为INT(4) ZEROFILL的列,将检索5
的值作为0005
。
Note
table 达式或UNION查询中涉及的列将忽略ZEROFILL
属性。
如果将大于显示宽度的值存储在具有ZEROFILL
属性的整数列中,则当 MySQL 为某些复杂的联接生成临时 table 时,您可能会遇到问题。在这些情况下,MySQL 假定数据值适合列显示宽度。
所有整数类型都可以具有可选的(非标准)UNSIGNED
属性。无符号类型可用于仅允许一列中使用非负数,或者在您需要该列的较大的较高数字范围时使用。例如,如果INT列为UNSIGNED
,则列范围的大小相同,但其端点从-2147483648
和2147483647
向上移动到0
和4294967295
。
浮点和定点类型也可以是UNSIGNED
。与整数类型一样,此属性可防止将负值存储在列中。与整数类型不同,列值的上限范围保持不变。
如果为数字列指定ZEROFILL
,MySQL 将自动添加UNSIGNED
属性。
整数或浮点数据类型可以具有AUTO_INCREMENT
属性。当您将NULL
的值插入到已索引的AUTO_INCREMENT
列中时,该列将设置为下一个序列值。通常,它是value+1
,其中* value
*是 table 中当前列的最大值。 (AUTO_INCREMENT
序列以1
开头.)
将0
存储到AUTO_INCREMENT
列与存储NULL
具有相同的效果,除非启用了NO_AUTO_VALUE_ON_ZERO SQL 模式。
插入NULL
以生成AUTO_INCREMENT
值要求将该列声明为NOT NULL
。如果将该列声明为NULL
,则插入NULL
将存储NULL
。当您在AUTO_INCREMENT
列中插入任何其他值时,该列将设置为该值,并且将重置序列,以便从插入的值开始依次生成下一个自动生成的值。
不支持AUTO_INCREMENT
列的负值。