MySQL 如何处理枚举类型的空值和null值
MySQL只有在SQL模式未设置为TRADITIONAL、STRICT_TRANS_TABLES或STRICT_ALL_TABLES时,才允许空值作为枚举类型的值。否则,MySQL将会拒绝空值并抛出错误。我们知道每个枚举类型的值都有一个索引值,而空值的索引值为0。
阅读更多:MySQL 教程
示例
mysql> SET SQL_MODE ='Traditional';
Query OK, 0 rows affected (0.00 sec)
mysql> Insert into result(id, name,grade) values(100, 'Raman', '');
ERROR 1265 (01000): Data truncated for column 'Grade' at row 1
现在,更改SQL模式后,我们可以按如下方式插入空字符串:
mysql> Set SQL_MODE ='';
Query OK, 0 rows affected (0.00 sec)
mysql> Insert into result(id, name, grade) values(100, 'Raman', '');
Query OK, 1 row affected, 1 warning (0.04 sec)
mysql> select * from result;
+-----+-------+-------+
| Id | Name | Grade |
+-----+-------+-------+
| 100 | Raman | |
+-----+-------+-------+
1 row in set (0.00 sec)
MySQL只有在不指定ENUM列的NOT NULL时才允许枚举类型的null值。我们知道每个枚举类型的值都有一个索引值,而null值的索引值为null。
示例
mysql> Insert into result(id, name, grade) values(101, 'Rahul', NULL);
Query OK, 1 row affected (0.04 sec)
以上查询将插入null值,因为我们在ENUM列声明中没有指定NOT NULL。
mysql> select * from result;
+-----+-------+-------+
| Id | Name | Grade |
+-----+-------+-------+
| 100 | Raman | |
| 101 | Rahul | NULL |
+-----+-------+-------+
2 rows in set (0.00 sec)