自MySQL 5.5以来的BIGINT超出范围错误

自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

我正在为我的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 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';