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

MySQL จัดการ Overflow ระหว่างการประเมินนิพจน์ตัวเลขอย่างไร

MySQL จะแสดงข้อผิดพลาดหากเกิด overflow ระหว่างการประเมินนิพจน์ตัวเลข ตัวอย่าง: ค่า BIGINT ที่มากที่สุดคือ 9223372036854775807 นิพจน์ต่อไปจะก่อให้เกิดข้อผิดพลาด:

mysql> SELECT 9223372036854775807 + 1;
ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'

MySQL จัดการ overflow แบบนี้ได้ 2 วิธี:

1. แปลงค่าเป็น UNSIGNED

MySQL อนุญาตการคำนวณดังกล่าวโดยแปลงค่าเป็น unsigned:

mysql> SELECT CAST(9223372036854775807 AS UNSIGNED) + 1;
+------------------------------------------+
| CAST(9223372036854775807 AS UNSIGNED) +1 |
+------------------------------------------+
| 9223372036854775808                      |
+------------------------------------------+
1 row in set (0.07 sec)

2. ใช้ Exact-Value Arithmetic

MySQL ใช้ exact-value arithmetic จัดการนิพจน์ได้ เนื่องจาก overflow ขึ้นอยู่กับช่วงค่าของ operands ตัวอย่างคำนวณด้วยค่า DECIMAL:

mysql> SELECT 9223372036854775807.0 + 1;
+---------------------------+
| 9223372036854775807.0 + 1 |
+---------------------------+
| 9223372036854775808.0     |
+---------------------------+
1 row in set (0.01 sec)