Heim  >  Artikel  >  Datenbank  >  Wie geht MySQL mit Überläufen bei der Auswertung numerischer Ausdrücke um?

Wie geht MySQL mit Überläufen bei der Auswertung numerischer Ausdrücke um?

WBOY
WBOYnach vorne
2023-08-24 10:05:021325Durchsuche

MySQL 如何处理数值表达式评估期间的溢出?

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:

DURCH KONVERTIERUNG VON WERT IN UNSIGNED

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)

Durch Verwendung der Arithmetik mit exakten Werten

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen