11.1.6 数值类型属性


官方文档地址: 11.1.6 Numeric Type Attributes


显示宽度

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

显示宽度不限制可存储在列中的值的范围。它也不会阻止比列显示宽度宽的值正确显示。例如,指定为SMALLINT(3)的列,通常的SMALLINT范围是-3276832767,超出3位显示宽度的值会正常显示。

ZEROFILL

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

注意

对于表达式或UNION查询中涉及的列,ZEROFILL属性将被忽略。
如果您将大于显示宽度的值存储在具有ZEROFILL属性的整数列中,当 MySQL 为一些复杂的连接生成临时表时,可能会遇到问题。这种情况下,MySQL 假设数据值符合列显示宽度。

从 MySQL 8.0.17 开始,对于数值型数据类型,ZEROFILL属性已被弃用,对于整数型数据类型,显示宽度属性也已被弃用。在未来的 MySQL 版本中,应该会删除对零填充和整数数据类型的显示宽度的支持。考虑使用另一种方法来产生这些属性的效果。例如,应用程序可以使用LPAD()函数将数字零填充到所需的宽度,或者可以将格式化后的数字存储在CHAR列中。

所有整数类型都可以有一个可选的(非标准的)UNSIGNED属性。无符号类型可用于仅允许列中存在非负数,或者当需要为列设置更大的上限数值范围时。例如,如果一个INT列是UNSIGNED的,该列的范围的大小是相同的,但是它的两个端点都向上移动了,从-21474836482147483647移动到04294967295

UNSIGNED

浮点和定点类型也可以是UNSIGNED的。与整数类型一样,此属性防止负值存储在列中。与整数类型不同,列值的上限范围保持不变。从 MySQL 8.0.17 开始,对于FLOATDOUBLEDECIMAL类型的列(以及任何同义词),UNSIGNED属性已被弃用,在未来的 MySQL 版本中,应该会删除对它们的支持。可以考虑对这样的列使用一个简单的CHECK约束。

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

AUTO_INCREMENT

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

AUTO_INCREMENT列中存储0与存储NULL的效果相同,除非启用了NO_AUTO_VALUE_ON_ZERO SQL 模式。

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

AUTO_INCREMENT列不支持负值。

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

从 MySQL 8.0.17 开始,FLOATDOUBLE列不支持AUTO_INCREMENT;在未来的 MySQL 版本中,应该会删除它。考虑从这些列中删除AUTO_INCREMENT属性,或者将它们转换为整数类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值