我在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.
个
但我不太明白它的意思。有人能解释一下是什么问题产生了这个警告,以及如何解决它?
3条答案
按热度按时间z2acfund1#
请查看Numeric Type Attributes,了解更完整的故事:
MySQL支持一个扩展,可以在类型的base关键字后面的括号中指定整型数据类型的显示宽度。(4)指定了一个显示宽度为四位数的INT。应用程序可以使用此可选显示宽度来显示宽度小于指定列宽度的整数值,方法是向左填充空格。(也就是说,此宽度存在于随结果集返回的元数据中。是否使用此宽度取决于应用程序。)
显示宽度不会限制可存储在列中的值的范围,也不会妨碍正确显示比列显示宽度宽的值。例如,指定为SMALLINT(3)的列的SMALLINT范围通常为-32768到32767,超出三位数允许范围的值将使用三位数以上的数字完整显示。
因此,在MySQL的当前版本(编写时为8.0.17)之前,忽略这些警告是安全的。
如果您希望避免这些警告并谨慎行事,请将所有受影响的表的列类型定义从
INT(##)
更新为INT
(即,不显式指定显示宽度)。s8vozzvw2#
这意味着你不应该指定一个整数值的宽度,只需要写为
int
,而不是int(5)
。tzcvj98z3#
此警告适用于所有
INT
类型:INT
、SMALLINT
、TINYINT
、MEDIUMINT
、BIGINT
。这意味着在未来的MySQL版本中,将不需要指定显示长度。在我的例子中,触发警告的是
TINYINT(1)
。要防止出现警告,请执行以下操作:
is_duplicate TINYINT
而不是is_duplicate TINYINT(1)