Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Công dụng của chế độ SQL NO_UNSIGNED_SUBTRACTION trong xử lý tràn số?

Khi chế độ SQL strict được bật, phép trừ giữa các giá trị nguyên mà một là kiểu UNSIGNED sẽ tạo ra kết quả UNSIGNED theo mặc định. Nhưng MySQL sinh ra lỗi nếu kết quả là số âm. Có thể quan sát với ví dụ sau:

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)'

Lỗi sau truy vấn trên cho thấy là tràn số sau biểu thức số học.

Bây giờ, có thể xử lý với việc bật chế độ NO_UNSIGNED_SUBTRACTION SQL mode. Sau khi bật chế độ này, kết quả sẽ là -1 thay vì lỗi.

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)