在将客户端从MySQL 5.4升级到5.7之后,我开始收到"BIGINT UNSIGNED value is out of range...“的提示。错误。我编辑了my.cnf并设置了sql_mode = "NO_UNSIGNED_SUBTRACTION“,并使用了SHOW变量来确保它确实使用了该模式。这确实解决了应用程序中的初始问题,但今天一个无符号的int列抛出了相同的错误(BTW inventory为2)……
UPDATE table SET inventory = inventory - 1我不明白为什么因为我认为新的sql_mode会将行为恢复到5.5之前的版本?我不想为了简单的算术运算而开始在我的语句中转换所有的东西,所以我脑海中的逻辑解决方案就是将我所有的无符号整数转换成有符号整数,除了主要的自动增量键。
这是避免这些超出范围错误的最佳解决方案吗?
发布于 2017-08-30 07:15:15
我做了更多的挖掘,找到了我的答案,并想在这里分享给未来被困在这个问题上的任何人。SQL模式NO_UNSIGNED_SUBTRACTION确实在工作,并且没有恢复到这个表/列。简而言之,问题是该表上有一个触发器,我从2009年的一个有点相关的MySQL bug report中发现,正如Davi Arnaut在用户评论中所说的那样,触发器和预准备语句使用的是创建它们时正在使用的SQL模式……啊!所以,我重新定义了触发器,一切都像预期的那样工作。
https://stackoverflow.com/questions/45929591
复制相似问题