MySQL 在評估數值表示式期間如何處理溢位?
正如我們所知,如果在評估數值表示式期間發生溢位,MySQL 將產生一個錯誤。例如,最大的有符號 BIGNT 是 9223372036854775807,因此以下表達式會產生錯誤 −
mysql> Select 9223372036854775807 + 1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'
MySQL 能夠按照以下方式處理此類溢位
透過將值轉換為無符號
MySQL 透過將值轉換為無符號啟用此類運算,如下所示 −
mysql> Select CAST(9223372036854775807 AS UNSIGNED) +1; +------------------------------------------+ | CAST(9223372036854775807 AS UNSIGNED) +1 | +------------------------------------------+ | 9223372036854775808 | +------------------------------------------+ 1 row in set (0.07 sec)
透過使用精確值運算
MySQL 可以使用精確值運算來處理前面的表示式。這是因為溢位的發生取決於運算元的範圍。例如,可以按如下方式使用 DECIMAL 值進行上述計算 −
mysql> Select 9223372036854775807.0 + 1; +---------------------------+ | 9223372036854775807.0 + 1 | +---------------------------+ | 9223372036854775808.0 | +---------------------------+ 1 row in set (0.01 sec)
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP