如果我在ENUM中插入无效值,MySQL将返回什么?

如果禁用了严格的SQL模式,并且我们向ENUM中插入了无效值(不在允许的枚举值列表中),则MySQL将插入一个空字符串,而不是引发错误。但是,如果启用了严格的SQL模式,则MySQL在插入无效值时会引发错误。

禁用严格的SQL模式后,我们将无效的字符串插入到ENUM中,如下所示:

mysql> Insert into result(id, name, grade) values(100, 'Gaurav','abcd');

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';

mysql> Insert into result(id, name, grade) values(101, 'Saurabh','abcd');
ERROR 1265 (01000): Data truncated for column 'Grade' at row 1
猜你喜欢