Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การใช้โหมด 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)'

ข้อผิดพลาดหลังจากข้อความค้นหาด้านบนแสดงว่าเป็นการล้นหลังจากนิพจน์เลขคณิต

ขณะนี้ สามารถจัดการได้ด้วยความช่วยเหลือของการเปิดใช้งานโหมด SQL NO_UNSIGNED_SUBTRACTION หลังจากเปิดใช้งานโหมดนี้ ผลลัพธ์จะเป็น -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)