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)

更新於:2020 年 6 月 20 日

188 次檢視

職業 起航

完成課程獲得認證

開始
廣告
© . All rights reserved.