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

ประโยชน์ของ SQL Mode NO_UNSIGNED_SUBTRACTION ในการจัดการล้น (overflow)

เมื่อเปิด SQL strict mode การลบระหว่างค่าจำนวนเต็มที่มีหนึ่งค่าเป็น UNSIGNED จะให้ผลลัพธ์เป็น UNSIGNED 1004071549 ประโยชน์ของ SQL Mode NO_UNSIGNED_SUBTRACTION ในการจัดการล้น (Overflow)

เมื่อเปิด SQL strict mode การลบระหว่างค่าจำนวนเต็มที่มีหนึ่งค่าเป็น UNSIGNED จะให้ผลลัพธ์เป็น 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)'

ข้อผิดพลาดด้านบนแสดงถึงการล้น (overflow) หลังการคำนวณเลขคณิต

สามารถจัดการได้โดยเปิดใช้งาน SQL mode 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)