Mysql
 sql >> Datenbank >  >> RDS >> Mysql

BIGINT UNSIGNED VALUE IST außerhalb des Bereichs My SQL

Bitte lesen Sie "Out-of-Range- und Overflow-Handling ".
Hier steht:

mysql> SELECT 9223372036854775807 + 1;

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

Damit die Operation in diesem Fall erfolgreich ausgeführt werden kann, konvertieren Sie den Wert in unsigned;

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

Eine Änderung an einem Teil Ihrer Abfrage wie folgt würde das Problem lösen.

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

Andernfalls müssen Sie möglicherweise den sql_mode ändern bei unsignierten Operationen.

mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

und führen Sie dann Ihre Abfrage aus, um die gewünschte Ausgabe zu erhalten.

Siehe auch einen ähnlichen Beitrag, der in einem Forum beantwortet wurde hier .