我得到了以下错误
#1690-BIGINT无符号值超出了'(
legends.spawns.quantity-tmp_field中的范围‘
这是我的查询
SELECT drops.common, drops.uncommon, drops.rare, drops.legendary, spawns . *
, ( quantity - COUNT( game_moblist.spawn_id ) ) AS quantity_to_spawn
, mobs . *
FROM spawns
LEFT JOIN mobs
USING ( mob_id )
LEFT JOIN game_moblist
USING ( spawn_id )
LEFT JOIN drops ON (
SELECT MAX( level )
FROM drops
WHERE drops.type = mobs.drop_list
AND drops.level <= spawns.level )
GROUP BY spawn_id
HAVING quantity_to_spawn >=0
AND next_spawn <=0我已经盯着它看了很久了,很抱歉。
spawns表- count game_moblist.spawn_id是所有可能的行的0,但只有1(我删除了一行以测试查询)
否则的数据是相当长的,与我的问题无关,我想。
知道如何避免这个错误吗?
发布于 2012-07-28 19:54:03
请阅读"http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html“。
上面写着:
从MySQL 5.5.5开始,数值表达式计算期间的溢出会导致错误。例如,最大的有符号BIGINT值是9223372036854775807,因此下面的表达式会产生一个错误。
mysql> SELECT 9223372036854775807 + 1;
ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)'若要使操作在这种情况下成功,请将值转换为无符号;
mysql> SELECT CAST(9223372036854775807 AS UNSIGNED) + 1;
+-------------------------------------------+
| CAST(9223372036854775807 AS UNSIGNED) + 1 |
+-------------------------------------------+
| 9223372036854775808 |
+-------------------------------------------+对部分查询的更改将解决此问题,如下所示。
( CAST( quantity AS SIGNED ) - COUNT( game_moblist.spawn_id ) ) AS quantity_to_spawn否则,您可能需要在未签名操作上更改sql_mode。
mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';然后运行您的查询以获得所需的输出。
也可以在论坛http://translate.google.co.in/translate?hl=en&sl=de&u=http://www.klamm.de/forum/f28/fehler-1690-bigint-unsigned-value-is-out-of-range-in-377479.html&prev=/search?q=http://www.klamm.de/forum/f28/fehler-1690-bigint-unsigned-value-is-out-of-range-in-377479.html&hl=en&biw=1024&bih=619&prmd=imvns&sa=X&ei=SkEUULywJ47jrAeKzYHwCg&sqi=2&ved=0CCkQ7gEwAA上看到类似的回复。
https://stackoverflow.com/questions/11698613
复制相似问题