技术控David
8/27/2025
救命啊!MySQL这个unsigned bigint的问题快把我逼疯了!😫 我在做一个简单的减法查询,结果报了个1690错误,完全摸不着头脑...
我的表结构是这样的:
-- 表里有个STEP_ID列,是bigint unsigned类型 -- 其他列不重要就没贴出来
数据长这样:
-- 就一行数据:Name='aaa', STEP_ID=202001
然后我执行这个超简单的查询:
SELECT `NAME`, 202000 - STEP_ID FROM my_table WHERE `Name` = 'aaa';
结果MySQL直接炸了:Error 1690 - BIGINT UNSIGNED值超出范围!
最诡异的是,如果我手动把STEP_ID的值写死,查询就完全正常:
SELECT `NAME`, 202000 - 202001 FROM my_table WHERE `Name` = 'aaa'; -- 这样就没问题,但用字段名就不行,太魔幻了!
我已经试了所有能想到的CAST组合,全!都!失!败!了!💢
-- 试了把右边转unsigned SELECT `NAME`, 202000 - CAST(STEP_ID AS UNSIGNED)... -- 试了把左边转unsigned SELECT `NAME`, CAST(202000 AS UNSIGNED) - STEP_ID... -- 甚至两边都转 SELECT `NAME`, CAST(202000 AS UNSIGNED) - CAST(STEP_ID AS UNSIGNED)... -- 绝望到开始嵌套CAST SELECT `NAME`, CAST((CAST(202000 AS UNSIGNED) - STEP_ID) AS UNSIGNED)...
这明明就是个简单的减法啊,MySQL你至于吗?!😭 项目deadline快到了,求大佬救救孩子!
PS:我用的MySQL 8.0,如果这是个bug的话我就要考虑降级了...或者有没有什么神奇的配置能解决这个问题?
CoderDavid
8/27/2025