ดังที่เราทราบดีว่า MySQL จะทำให้เกิดข้อผิดพลาดหากล้นระหว่างการประเมินนิพจน์ตัวเลข ตัวอย่างเช่น BIGNT ที่มีลายเซ็นที่ใหญ่ที่สุดคือ 9223372036854775807 ดังนั้นนิพจน์ต่อไปนี้จะทำให้เกิดข้อผิดพลาด -
mysql> Select 9223372036854775807 + 1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'
MySQL สามารถจัดการกับโอเวอร์โฟลว์ประเภทนี้ได้ด้วยวิธีต่อไปนี้:
โดยการแปลงค่าเป็นค่าที่ไม่ได้ลงนาม
MySQL เปิดใช้งานการดำเนินการดังกล่าวโดยแปลงค่าเป็น unsigned ดังนี้ -
mysql> Select CAST(9223372036854775807 AS UNSIGNED) +1; +------------------------------------------+ | CAST(9223372036854775807 AS UNSIGNED) +1 | +------------------------------------------+ | 9223372036854775808 | +------------------------------------------+ 1 row in set (0.07 sec)
โดยการใช้เลขคณิตที่แน่นอน
MySQL สามารถใช้เลขคณิตค่าที่แน่นอนเพื่อจัดการกับนิพจน์ก่อนหน้า เป็นเพราะโอเวอร์โฟลว์เกิดขึ้นขึ้นอยู่กับช่วงของตัวถูกดำเนินการ ตัวอย่างเช่น การคำนวณข้างต้นสามารถทำได้โดยใช้ค่า DECIMAL ดังนี้ −
mysql> Select 9223372036854775807.0 + 1; +---------------------------+ | 9223372036854775807.0 + 1 | +---------------------------+ | 9223372036854775808.0 | +---------------------------+ 1 row in set (0.01 sec)