暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 11.1.6 数字类型属性

原创 由迪 2021-12-23
404

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

显示宽度也没有限制,可以被存储在列中的值的范围内。它也不会阻止比列显示宽度更宽的值正确显示。例如,指定为的列 SMALLINT(3)的通常 SMALLINT范围为-32768to 32767,超出三位数字允许范围的 值使用三位以上的数字完整显示。

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

笔记

ZEROFILL对于表达式或UNION查询中涉及的列 ,将忽略该属性 。

如果在具有该ZEROFILL 属性的整数列中存储大于显示宽度的值,则在 MySQL 为某些复杂连接生成临时表时可能会遇到问题。在这些情况下,MySQL 假定数据值适合列显示宽度。

从 MySQL 8.0.17 开始,ZEROFILL不推荐使用数值数据类型的属性,整数数据类型的显示宽度属性也是如此。您应该期望ZEROFILL在未来版本的 MySQL 中删除对整数数据类型的支持 和显示宽度。考虑使用产生这些属性效果的替代方法。例如,应用程序可以使用该 LPAD()函数将数字零填充到所需的宽度,或者它们可以将格式化的数字存储在CHAR列中。

所有整数类型都可以有一个可选的(非标准) UNSIGNED属性。无符号类型可用于仅允许列中的非负数,或者当您需要更大的列的上限数字范围时。例如,如果一INT列是 UNSIGNED,则该列范围的大小相同,但其端点上移,从 -2147483648214748364704294967295

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

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

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

除非启用了SQL 模式,否则 存储0AUTO_INCREMENT列中的效果与存储相同。 NULLNO_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不推荐使用FLOATDOUBLE列;您应该期望它会在 MySQL 的未来版本中被删除。考虑AUTO_INCREMENT从这些列中删除属性,或将它们转换为整数类型。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论