In questo caso l'SQL_MODE non c'entra, perché i valori di default sono sempre permessi, e le colonne hanno sempre un valore di default (0 se sono numeriche, '' se sono stringhe). NOT NULL non c'entra molto, perché dà errore solo se si tenta di inserire NULL. Ma NULL e '' sono due valori diversi (o meglio, NULL è un non-valore).

Dovresti usare un trigger simile a questo:

CREATE TRIGGER `xxxxxxx`
BEFORE INSERT
ON `tab_name`
FOR EACH ROW
BEGIN
IF NEW.`col_name` = '' THEN
SIGNAL SQLSTATE VALUE '45000'
SET MESSAGE_TEXT = '[table:tab_name] - `col_name` column is not valid';
END IF;
END;