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