如果我在 ENUM 中插入無效值,MySQL 會返回什麼?


如果停用了嚴格 SQL 模式,並且我們向 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

更新於: 30-Jan-2020

598 人檢視

啟動你的 職業生涯

完成課程,獲得認證

開始
廣告
© . All rights reserved.