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

Sze*_*obe 36 mysql phpmyadmin

在 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.

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

car*_*yte 39

检查这个数字类型属性以获得更完整的故事:

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

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

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

如果您想避免这些警告并安全操作,请更新所有受影响的表,其列类型定义类似于INT(##)to INT(即,无需明确指定显示宽度)。

  • 当我声明 INT 为空时,默认情况下它会被分配为 INT(11)。 (4认同)

Ban*_*nty 17

该警告适用于所有INT类型:INTSMALLINTTINYINTMEDIUMINTBIGINT。这意味着在未来的 MySQL 版本中将不需要指定显示长度。

就我而言,正是它TINYINT(1)触发了警告。

为了防止出现警告,请执行以下操作: is_duplicate TINYINT而不是is_duplicate TINYINT(1)

  • 我对“TINYINT(1)”有同样的问题,但将其更改为“BOOLEAN”。 (2认同)

小智 7

这意味着您不应指定整数值的宽度。把它写成only int,不是int(5)