Una stringa vuota è diversa da null.
Se provi a inserire un valore null mysql ti restituirà l'errore
Column 'campo' cannot be null
Se invece passi una stringa vuota e non è specificato un valore di default, myql ti restituirà un warning.
codice:
mysql> create table prova (
-> id int not null auto_increment primary key,
-> testo varchar(10),
-> num int not null);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into prova (testo,num) values ('aaa',3);
Query OK, 1 row affected (0.00 sec)
mysql> insert into prova (testo) values ('aaa');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1364 | Field 'num' doesn't have a default value |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into prova (testo,num) values ('aaa',null);
ERROR 1048 (23000): Column 'num' cannot be null
Quindi se vuoi che obbligatoriamente venga inserito un valore relativamente a un campo devi accertartene in fase di validazione dell'input.