2017-08-29 83 views
0

将客户端从MySQL 5.4升级到5.7后,我开始收到“BIGINT UNSIGNED值超出范围...”错误。我编辑了my.cnf并设置了sql_mode =“NO_UNSIGNED_SUBTRACTION”,并使用了SHOW VARIABLES来确保它确实使用了该模式。这的确在应用程序,但今天一个unsigned int的列抛出同样的错误修复最初的问题(顺便说一句库存2)...SQL模式是NO_UNSIGNED_SUBTRACTION,但仍然超出范围错误

UPDATE table SET inventory = inventory - 1 

我不明白为什么,因为我认为新的sql_mode将恢复行为到5.5之前?我不想开始在我的语句中强制执行所有操作,只是为了进行简单的算术操作,所以我脑海中的逻辑解决方案只是将所有无符号整数列转换为带符号的整数,但主自动递增键除外。

这是避免这些超出范围错误的最佳解决方案吗?

回答

0

我做了一些更多的挖掘并找到了我的答案,并希望在此分享将来遇到此问题的任何人。 SQL模式NO_UNSIGNED_SUBTRACTION实际上正在工作,并且尚未还原为此表/列。简而言之,问题在于该表有一个触发器,我从2009年的一个有点相关的MySQL bug report中发现,如Davi Arnaut的用户评论所述,触发器和准备好的语句使用创建时使用的SQL模式...啊!所以,我重新定义了触发器,并且一切按预期工作。