如果我在 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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP