MYSQL - 警告:#1681 不推荐使用整数显示宽度

Posted

技术标签:

【中文标题】MYSQL - 警告:#1681 不推荐使用整数显示宽度【英文标题】:MYSQL - Warning: #1681 Integer display width is deprecated 【发布时间】:2020-03-15 05:27:14 【问题描述】:

phpMyAdmin 中导入 mysql 转储时收到此警告:

Warning: #1681 Integer display width is deprecated and will be removed in a future release.

我在https://dev.mysql.com/worklog/task/?id=13127找到了这个

Deprecate the ZEROFILL attribute for numeric data types and the display width attribute for integer types.

但我真的不明白这是什么意思。有人可以解释产生此警告的问题是什么,以及如何解决它。

【问题讨论】:

从你的链接得知:“显示宽度不影响数据类型的存储大小”。 【参考方案1】:

查看Numeric Type Attributes 了解完整的故事:

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

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

因此,在 MySQL 的当前版本(写作时为 8.0.17)之前忽略此类警告是安全的。

如果您想避免这些警告并安全起见,请将所有列类型定义为 INT(##) 的受影响表更新为 INT(即不明确指定显示宽度)。

【讨论】:

当我声明 INT 为空时,默认情况下它被分配为 INT(11)。 @Fakipo 你是怎么检查的? @PurushothamanSrikanth 只使用 desc 表。 @Fakipo 在 mysql8 中,它不会分配为 int(11) 但是在旧版本中,当使用 int 时,默认值确实是 int(11)【参考方案2】:

这意味着您不应该指定整数值的宽度。只写int,而不是int(5)

【讨论】:

以上是关于MYSQL - 警告:#1681 不推荐使用整数显示宽度的主要内容,如果未能解决你的问题,请参考以下文章

连接到 MySQL 数据库时有关 SSL 连接的警告

MySQL出现警告:Integer display width is deprecated and will be removed in a future release

抑制 Java 中不推荐使用的导入警告

设置模块不推荐使用的警告

不推荐使用 initWithReceiverApplicationID 使用 initWithDiscoveryCriteria 警告 Chromecast

警告:componentWillReceiveProps 已重命名,不推荐使用