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

MySQL จัดการค่าตัวเลขที่อยู่นอกช่วง (Out of Range) อย่างไร

การจัดการค่าตัวเลขที่อยู่นอกช่วงที่อนุญาตของชนิดข้อมูลคอลัมน์ ขึ้นอยู่กับ 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)