【问题标题】:BIGINT Out-of-range Error since MySQL 5.5自 MySQL 5.5 以来的 BIGINT 超出范围错误
【发布时间】:2011-04-21 10:50:23
【问题描述】:

我正在为我的 CMS 使用嵌套集,但从 MySQL 5.5 开始,我无法移动节点。
抛出以下错误:

重新排序文档时出错:MySQL-DB 中的错误:无效 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);

错误:BIGINT UNSIGNED 值超出 '(lektoren.baum2.id - 6)'
错误号:1690

有人解决了这个问题吗?我已经尝试过铸造一些零件,但没有成功。

【问题讨论】:

  • @user718790,欢迎来到 stackoverflow。

标签: mysql nested-sets outofrangeexception


【解决方案1】:

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

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

可能较早的版本隐式转换为 SIGNED。你需要做一个演员表。

试试

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

【讨论】:

【解决方案2】:
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

在执行查询之前调用它。

【讨论】:

    【解决方案3】:

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

    该更改将仅限于 mysql。

    相反,做

    ORDER BY ABS(- 6 + baum2.id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-26
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多