自MySQL 5.5以来的BIGINT超出范围错误
我正在为我的CMS使用嵌套集,但由于MySQL 5.5,我无法移动节点。自MySQL 5.5以来的BIGINT超出范围错误,mysql,nested-sets,outofrangeexception,Mysql,Nested Sets,Outofrangeexception,我正在为我的CMS使用嵌套集,但由于MySQL 5.5,我无法移动节点。 将引发以下错误: 重新排序文档时出错:MySQL数据库中的错误:无效SQL: SELECT baum2.id AS id, COUNT(*) AS level FROM elisabeth_tree AS baum1, elisabeth_tree AS baum2 WHERE baum2.lft BETWEEN baum1.lft AND baum1.rgt GROUP BY baum2.lft ORDER
将引发以下错误: 重新排序文档时出错:MySQL数据库中的错误:无效SQL:
SELECT baum2.id AS id,
COUNT(*) AS level
FROM elisabeth_tree AS baum1,
elisabeth_tree AS baum2
WHERE baum2.lft BETWEEN baum1.lft AND baum1.rgt
GROUP BY baum2.lft
ORDER BY ABS(baum2.id - 6);
错误:“(lektoren
baum2
id
-6)”中的BIGINT无符号值超出范围错误号码:1690
有人解决了这个问题吗?我已经尝试了一些部分,但没有成功。BIGINT UNSIGNED是UNSIGNED,不能为负数 如果id小于6,表达式
ABS(lektoren.baum2.id-6)
将使用负中间值
早期版本可能隐式转换为带符号的。你需要做一个演员
试一试
ABS订单(CAST(lectoren.baum2.id作为BIGINT签名)-6)
这一变化将是唯一的
相反,你应该这样做
ORDER BY ABS(- 6 + baum2.id);
在执行查询之前调用此函数。@user718790,欢迎使用stackoverflow。根据:默认情况下,如果任何操作数无符号,整数操作数之间的减法将生成无符号结果。升级到Mysql5.5后,我也遇到了同样的问题。请参见此处的
CAST(x作为BIGINT SIGNED
)抛出错误。根据,仅应使用有符号(或有符号整数
)。我根据那个编辑了答案。
ORDER BY ABS(- 6 + baum2.id);
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';