2011-04-21 49 views
7

我正在爲我的CMS使用嵌套集,但自MySQL 5.5以來我無法移動節點。
以下錯誤被拋出:BIGINT自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值超出範圍「(lektorenbaum2id。 - 6)'
error number:1690

有沒有人解決過這個問題?我已經嘗試過施放一些部件,但沒有成功。

+0

@ user718790,歡迎來到stackoverflow。 – Johan 2011-04-21 11:07:28

回答

10

BIGINT UNSIGNED是無符號的,不能是負數。如果ID是小於6

推測早期隱式轉換爲符號版本

你的表達ABS(lektoren.baum2.id - 6)將使用一個負中間值。你需要做一個演員。

嘗試

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

是的,就是這樣,謝謝! :) – user718790 2011-04-24 20:58:29

+2

根據[這裏的文檔](http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_no_unsigned_subtraction):_默認情況下,整數操作數之間的減法產生UNSIGNED如果任何操作數爲UNSIGNED,則返回結果._ – Wiseguy 2011-11-12 14:27:52

+0

升級到Mysql5.5後,我也遇到了同樣的問題請參閱http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and- overflow.html – Omesh 2012-08-02 10:22:31

1

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

這種變化將是MySQL只。

代替,做的是執行查詢在此之前

ORDER BY ABS(- 6 + baum2.id); 
5
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'; 

呼叫。