首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 5.5之后的BIGINT超出范围错误

问MySQL 5.5之后的BIGINT超出范围错误
EN

Stack Overflow用户
提问于 2011-04-21 18:50:23
回答 3查看 6.7K关注 0票数 7

我正在为我的内容管理系统使用嵌套集,但从MySQL 5.5开始,我不能移动节点。

抛出以下错误:

重新排序文档时出错:MySQL-DB中的错误:无效的SQL:

代码语言:javascript
复制
 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);

错误: BIGINT无符号值超出'(lektoren.baum2.id -6的范围)‘

错误号: 1690

有没有人解决了这个问题?我已经试过扮演一些角色了,但是没有成功。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-21 19:08:36

BIGINT UNSIGNED是无符号的,不能为负数。

如果id小于6,则表达式ABS(lektoren.baum2.id - 6)将使用负中间值。

可能更早的版本隐式地转换为签名。你得打个石膏。

试一试

代码语言:javascript
复制
ORDER BY ABS(CAST(lectoren.baum2.id AS SIGNED) - 6)
票数 10
EN

Stack Overflow用户

发布于 2014-01-14 19:22:35

代码语言:javascript
复制
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

在执行查询之前调用此函数。

票数 5
EN

Stack Overflow用户

发布于 2012-08-13 00:24:25

ORDER BY ABS(CAST(lectoren.baum2.id AS BIGINT SIGNED) - 6)

这一更改将仅限于mysql。

相反,你应该这样做

代码语言:javascript
复制
ORDER BY ABS(- 6 + baum2.id);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5743069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档