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