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)
廣告