如果我在 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 人查看

启动你的 职业生涯

完成课程,获得认证

开始
广告