MySQL permettra la valeur à NULL si vous ne spécifiez pas NOT NULL
dans la définition de la colonne.
Voici un test rapide:
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)
donc MySQL ne respecte la valeur par défaut, mais permet également NULLs. (Fait intéressant, il tronquer les valeurs non valides et permettre à des chaînes vides aussi bien, mais c'est une autre question)
Lecture http://dev.mysql.com/doc/refman/5.1/en/enum.html ("Si une colonne de type ENUM est déclarée permettre NULL, la valeur NULL est une valeur juridique de la colonne, et la valeur par défaut est NULL. ») Je crois que l'on pourrait insérer avec succès NULL dans cette colonne. –