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

MySQL คืนค่าอะไรเมื่อแทรกค่าไม่ถูกต้องลงใน ENUM

หากโหมด SQL สтриงค์ (strict SQL mode) ปิดอยู่ และเราแทรกค่าที่ไม่ถูกต้อง (ซึ่งไม่อยู่ในรายการค่าที่อนุญาตของ ENUM) ลงใน ENUM แล้ว MySQL จะแทรกสตริงว่างแทนการโยนข้อผิดพลาด แต่หากโหมด SQL สтриงค์เปิดอยู่ MySQL จะโยนข้อผิดพลาดเมื่อแทรกค่าไม่ถูกต้อง

ตัวอย่าง

หลังจากปิดโหมด SQL สтриงค์ เราแทรกสตริงที่ไม่ถูกต้องลงใน ENUM ดังนี้:

mysql> INSERT INTO result(id, name, grade) VALUES (100, 'Gaurav', 'abcd');
Query OK, 1 row affected, 1 warning (0.03 sec)
mysql> SELECT * FROM result;
+-----+--------+-------+
| Id  | Name   | Grade |
+-----+--------+-------+
| 100 | Gaurav |       |
+-----+--------+-------+
1 row in set (0.00 sec)

จากคิวรีข้างต้น MySQL แทรกสตริงว่างแทนสตริงที่ไม่ถูกต้อง และไม่มีข้อผิดพลาด

เราสามารถได้หมายเลขดัชนีซึ่งคือ 0 และยืนยันว่าสตริงที่ MySQL แทรกคือสตริงว่าง เพราะค่าดัชนีของสตริงว่างคือ 0 เสมอ:

mysql> SELECT Grade + 0 FROM result;
+-----------+
| Grade + 0 |
+-----------+
| 0         |
+-----------+
1 row in set (0.00 sec)

แต่หลังจากเปิดโหมด SQL สтриงค์ ตามคิวรีด้านล่าง MySQL โยนข้อผิดพลาดเมื่อแทรกสตริงที่ไม่ถูกต้องลงใน ENUM:

mysql> SET SQL_MODE = 'Traditional';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO result(id, name, grade) VALUES (101, 'Saurabh', 'abcd');
ERROR 1265 (01000): Data truncated for column 'Grade' at row 1