BIGINT UNSIGNED VALUE IS out of range My SQL

后端 未结 9 730
一向
一向 2020-12-18 19:11

I\'m getting the following error

#1690 - BIGINT UNSIGNED value is out of range in \'(legends.spawns.quantity -

相关标签:
9条回答
  • 2020-12-18 20:02

    Another possible cause seems to be how the type of the result variable is allocated.

    eg.

    mysql> select (total_balance_06 * 0.045/(1-(1/1.045)^term_06) + unsec_instalments)/income from tbl_EUR_PDH;
    

    fails with

    ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(1 - ((1 / 1.045) ^ markov.tbl_EUR_PDH.term_06))'

    whereas

    mysql> select (total_balance_06 * 0.045/(1.0-(1.0/1.045)^term_06) + unsec_instalments)/income from tbl_EUR_PDH;
    

    does what one would expect (note that I simply replace "1" by "1.0")

    Philippe

    0 讨论(0)
  • 2020-12-18 20:05

    Additional way is to use MySQL IF operator. This helped me when both columns were BIGINT and Unsigned.

    0 讨论(0)
  • 2020-12-18 20:09

    Please read "Out-of-Range and Overflow Handling".
    It says:

    As of MySQL 5.5.5, overflow during numeric expression evaluation results in an error. For example, the largest signed BIGINT value is 9223372036854775807, so the following expression produces an error.

    mysql> SELECT 9223372036854775807 + 1;
    
    ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)'
    

    To enable the operation to succeed in this case, convert the value to unsigned;

    mysql> SELECT CAST(9223372036854775807 AS UNSIGNED) + 1;
    +-------------------------------------------+
    | CAST(9223372036854775807 AS UNSIGNED) + 1 |
    +-------------------------------------------+
    |                       9223372036854775808 |
    +-------------------------------------------+
    

    A change to part of your query, as following, would solve the issue.

    ( CAST( quantity AS SIGNED ) - COUNT( game_moblist.spawn_id ) ) AS quantity_to_spawn
    

    Otherwise you may require to change the sql_mode on unsigned operations.

    mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
    

    and then run your query to get desired output.

    See also a similar posting answered on a forum here.

    0 讨论(0)
提交回复
热议问题