MySQL 如何处理枚举的空值和 null 值?

mysqlmysqli database

仅当 SQL 模式未设置为 TRADITIONAL、STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 时,MySQL 才接受枚举的空值。否则,MySQL 将不接受空值并抛出错误。我们知道每个枚举值都有一个索引值,空值的索引值为 0。

示例

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)

仅当我们未在 ENUM 列中指定 NOT NULL 时,MySQL 才接受枚举的 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)

相关文章