如果禁用了严格的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