2011-04-21 21 views
7

Estoy trabajando con conjuntos anidados para mi CMS, pero desde MySQL 5.5 no puedo mover un nodo.
El siguiente error se tira:BIGINT Fuera de rango Error desde MySQL 5.5

Error al reordenar documentos: Error en MySQL-DB: SQL no válido:

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); 

error: BIGINT valor sin signo está fuera de rango en '(lektorenbaum2id.. - 6) '
número de error: 1690

¿Alguien ha resuelto este problema? Ya intenté hacer algunas partes pero no fue exitoso.

+0

@ user718790, bienvenido a stackoverflow. – Johan

Respuesta

10

BIGINT UNSIGNED no está firmado y no puede ser negativo.

Su expresión ABS(lektoren.baum2.id - 6) utilizará un valor intermedio negativo si la identificación es menor que 6.

Es de suponer que las versiones anteriores implícitamente convertido al firmado. Necesitas hacer un elenco.

Trate

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

Sí, eso es todo, ¡gracias! :) – user718790

+2

De acuerdo con [los documentos aquí] (http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_no_unsigned_subtraction): _Por defecto, la resta entre operandos enteros produce un UNSIGNED resultado si cualquier operando está DESIGNADO. – Wiseguy

+0

También he enfrentado el mismo problema después de actualizar a Mysql5.5. Consulte aquí http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and- overflow.html – Omesh

1

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

Ese cambio sería MySQL solamente.

lugar, hacer

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

Call esto antes de que se ejecute la consulta.