gpt4 book ai didi

mysql - MySQL 中的枚举是否需要为 NOT NULL?

转载 作者:IT老高 更新时间:2023-10-29 00:10:41 26 4
gpt4 key购买 nike

假设我有这个:

ALTER TABLE asdf ADD field ENUM('Y', 'N') DEFAULT 'N';

是否必须在末尾加上 NOT NULL,因为它只能是 Y 和 N?

EDT:根据评论,如果我知道软件总是将其设置为“N”或“Y”并且是硬编码的,那么是否可以将其关闭,或者它仍然可能以某种方式变为 null。

最佳答案

如果您没有在列定义中指定 NOT NULL,MySQL 将允许该值为 NULL。

这是一个快速测试:

mysql> create table test (id serial, field ENUM('Y','N') DEFAULT 'N');
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO test (field) VALUES ('Y');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test (field) VALUES ('N');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test () VALUES ();
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test (field) VALUES (NULL);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test (field) VALUES ('Invalid');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1265 | Data truncated for column 'field' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from test;
+----+-------+
| id | field |
+----+-------+
| 1 | Y |
| 2 | N |
| 3 | N |
| 4 | NULL |
| 5 | |
+----+-------+
5 rows in set (0.00 sec)

所以 MySQL 确实尊重默认值,但也允许 NULL。 (有趣的是,它会截断无效值并允许空白字符串,但这是一个不同的问题)

关于mysql - MySQL 中的枚举是否需要为 NOT NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com