NULL e' diverso da vuoto. Se setti un campo not null significa che non potra' assumere la condizione di null. In mancanza di dati o di NULL assumera' empty cioe vuoto se questo e' il default.... che e' poi quello che trovi con campo = ''

l'errore che ti da la query e' dovuta all'uso di apici sul valore numerico. Se il campo e' numerico ed il settaggio di SQL-MODE e' strictly, non viene eseguito il CASTING automatico della stringa in numerico e quindi viene segnalato l'errore. Le apici sui valori contraddistinguono le stringhe.