Por padrão, o MySQL aceita valores inválidos. Você pode definir o MySQL para o modo estrito para forçar valores válidos. Isso rejeitará uma consulta que não fornece um valor para uma coluna NOT NULL, além de impor a integridade em todos os tipos de colunas.
Atualização: O MySQL 5.7 e superior agora têm o modo estrito ativado por padrão. Portanto, não aceitaria valores inválidos por padrão, como nas versões anteriores.
http://dev.mysql .com/doc/refman/5.0/en/sql-mode.html#sql-mode-important
http://dev.mysql.com/doc /refman/5.0/en/sql-mode.html#sqlmode_strict_all_tables
Edit:@Barranka e @RocketHazmat fizeram bons comentários nos comentários.
''
não é o mesmo que null, então o MySQL permitirá isso em uma coluna NOT NULL. Nesse caso, você teria que recorrer ao seu código ou a um gatilho. No código (PHP por exemplo), isso pode ser bastante fácil, executando algo como:
if (!strlen($value)) {
// Exclude value or use NULL in query
}