MySQL sẽ cho phép giá trị là NULL nếu bạn không chỉ định NOT NULL
trong định nghĩa cột.
Dưới đây là một thử nghiệm nhanh:
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)
Vì vậy, MySQL không tôn trọng các giá trị mặc định, nhưng cũng cho phép null. (Thú vị, nó sẽ cắt ngắn giá trị không hợp lệ và cho phép chuỗi trống là tốt, nhưng đó là một vấn đề khác nhau)
Nguồn
2010-01-13 18:29:14
Reading http://dev.mysql.com/doc/refman/5.1/en/enum.html ("Nếu một cột ENUM được khai báo để cho phép NULL, giá trị NULL là một giá trị pháp lý cho cột, và giá trị mặc định là NULL. ") Tôi tin rằng người ta có thể chèn thành công NULL trong cột này. –