BIGINT Out-of-range Ошибка с MySQL 5.5 - PullRequest
7 голосов
/ 21 апреля 2011

Я работаю с вложенными наборами для своей 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

Кто-нибудь решил эту проблему?Я уже пытался отлить некоторые части, но это не удалось.

Ответы [ 3 ]

10 голосов
/ 21 апреля 2011

BIGINT UNSIGNED не подписано и не может быть отрицательным.

Ваше выражение ABS(lektoren.baum2.id - 6) будет использовать отрицательное промежуточное значение, если идентификатор меньше 6.

Предположительно, более ранние версии неявно преобразуются в SIGNED.Вам нужно выполнить приведение.

Попробуйте

ORDER BY ABS(CAST(lectoren.baum2.id AS SIGNED) - 6)
5 голосов
/ 14 января 2014
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

Вызывайте это до выполнения запроса.

1 голос
/ 12 августа 2012

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

Это изменение будет только MySQL.

вместо

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