NO_UNSIGNED_SUBTRACT SQL 模式用於處理溢位時有什麼用?


如果啟用了 SQL 嚴格模式,在其中一個為 UNSIGNED 型別的情況下,整數值之間的減法運算在預設情況下會產生無符號結果。但是,如果結果為負數,MySQL 將會產生一個錯誤。可以觀察以下示例 -

mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> Select CAST(0 AS UNSIGNED) -1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'

上述查詢後的錯誤顯示,它是數值運算表示式後的溢位。

現在,可以透過啟用 NO_UNSIGNED_SUBTRACTION SQL 模式來處理它。啟用此模式後,結果將為 -1,而不是錯誤。

mysql> Set sql_mode = 'NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.00 sec)

mysql> Select CAST(0 AS UNSIGNED) -1;
+------------------------+
| CAST(0 AS UNSIGNED) -1 |
+------------------------+
|                     -1 |
+------------------------+
1 row in set (0.00 sec)

更新於: 30-1 月 2020

293 次瀏覽

開啟您的 職業生涯

完成課程以獲取認證

開始學習
廣告
© . All rights reserved.