Da wir wissen, dass MySQL einen Fehler erzeugt, wenn bei der Bewertung numerischer Ausdrücke ein Überlauf auftritt, ist der größte vorzeichenbehaftete BIGNT beispielsweise 9223372036854775807, sodass der folgende Ausdruck einen Fehler erzeugt –
mysql> Select 9223372036854775807 + 1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'
MySQL kann solche Art verarbeiten von Überläufen auf folgende Weise:
MySQL ermöglicht solche Operationen, indem es die Werte wie folgt in vorzeichenlosen Wert umwandelt: -
mysql> Select CAST(9223372036854775807 AS UNSIGNED) +1; +------------------------------------------+ | CAST(9223372036854775807 AS UNSIGNED) +1 | +------------------------------------------+ | 9223372036854775808 | +------------------------------------------+ 1 row in set (0.07 sec)
MySQL kann die Arithmetik mit exakten Werten verwenden Verarbeiten Sie die oben genannten Ausdrücke. Dies liegt daran, dass je nach Bereich der Operanden ein Überlauf auftritt. Die obige Berechnung kann beispielsweise unter Verwendung des unten gezeigten DECIMAL-Werts durchgeführt werden: −
mysql> Select 9223372036854775807.0 + 1; +---------------------------+ | 9223372036854775807.0 + 1 | +---------------------------+ | 9223372036854775808.0 | +---------------------------+ 1 row in set (0.01 sec)
Das obige ist der detaillierte Inhalt vonWie geht MySQL mit Überläufen bei der Auswertung numerischer Ausdrücke um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!