在我将我的服务器升级到 PHP7 和 MySQL 5.7 之后,我收到一个错误查询:
UPDATE user SET user_rank_points = (@i := (@i + 1))
错误是:#1265 - 第 1 行“user_rank_points”列的数据被截断
有人有解决办法吗?
最佳答案
随着人们升级到 MySQL 5.7,这类问题将会出现很多。此版本的 MySQL 使严格 SQL 模式成为默认模式,这与早期版本中严格模式是一个选项不同。
在没有严格模式的情况下,当您尝试将 32768 之类的值存储到 SMALLINT
中时,它会默默地将该值截断为 32767,这是您可以存储的最大值一个带符号的 16 位整数。
您是否希望 MySQL 更改您尝试存储的数据?如果是这样,您可以更改 sql_mode
以删除严格模式,所有超过 215-1 的值都将被截断为该值。在此处了解如何执行此操作:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
或者您更喜欢它存储更大的整数值?如果是这样,请将您的列更改为 INT
。
或者当您的 @i
超过 215-1 时,您更喜欢它引发错误?如果是这样,这就是它现在的行为。
回复你的评论:
首先,INT(11)
与 INT(2)
或 INT(327)
没有任何不同。 number 参数只是显示宽度的提示,它与 INT
将存储的位数无关。请参阅我对 Types in MySQL: BigInt(20) vs Int(20) 的回答
您说在将列类型更改为 INT
后您仍然遇到相同的错误。 @i
的值是多少?收到错误后运行此查询:
SELECT @i;
关于mysql - #1265 - 列 MYSQL 5.7 的数据被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39351616/