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)

更新於:2020 年 1 月 30 日

293 次瀏覽

開啟你的 職業生涯

完成課程,獲得認證

開始學習
廣告