การจัดการค่าตัวเลขที่อยู่นอกช่วงที่อนุญาตของชนิดข้อมูลคอลัมน์ ขึ้นอยู่กับ SQL mode ดังนี้:
(ก) เปิด SQL Strict Mode - เมื่อ strict SQL mode เปิดอยู่ MySQL จะแสดงข้อผิดพลาดเมื่อป้อนค่านอกช่วง ในกรณีนี้ การแทรกข้อมูลบางส่วนหรือทั้งหมดจะล้มเหลว
ตัวอย่าง: สร้างตาราง 2 คอลัมน์ ชนิด TINYINT และ UNSIGNED TINYINT:
mysql> CREATE TABLE counting(Range1 TINYINT, Range2 TINYINT UNSIGNED); Query OK, 0 rows affected (0.14 sec)
เปิด strict SQL mode:
mysql> SET SQL_MODE = 'traditional'; Query OK, 0 rows affected (0.00 sec)
พยายาม INSERT ค่านอกช่วง MySQL แสดงข้อผิดพลาด และการ INSERT ทั้งสองล้มเหลว:
mysql> INSERT INTO Counting(Range1, Range2) VALUES(256,256); ERROR 1264 (22003): Out of range value for column 'Range1' at row 1 mysql> SELECT * FROM counting; Empty set (0.00 sec)
(ข) ปิด SQL Strict Mode - เมื่อ strict SQL mode ปิดอยู่ ค่าจะถูกตัด (clipped) ให้อยู่ที่ขีดปลายที่เหมาะสมของชนิดข้อมูลคอลัมน์ และเก็บค่าที่ตัดแล้ว MySQL แสดงคำเตือนจากการแปลงค่าคอลัมน์ที่เกิดจากการตัด
ตัวอย่าง: INSERT ค่าหลังปิด strict mode MySQL แสดงคำเตือนและเก็บค่าที่ตัดแล้ว:
mysql> SET SQL_MODE = ''; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Counting(Range1,Range2) VALUES(256,256); Query OK, 1 row affected, 2 warnings (0.02 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1264 | Out of range value for column 'Range1' at row 1 | | Warning | 1264 | Out of range value for column 'Range2' at row 1 | +---------+------+-------------------------------------------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM Counting; +--------+--------+ | Range1 | Range2 | +--------+--------+ | 127 | 255 | +--------+--------+ 1 row in set (0.00 sec)