STRINGE VUOTE
In ORACLE viene utilizzata una stringa vuota per rappresentare NULLO. Praticamente in tutto il resto, tuttavia, una stringa vuota è ancora una stringa, e quindi non NULL.
INTS
Nel tuo caso stai effettivamente inserendo STRINGS in una colonna INT. Questo forza un implicito Operazione CAST.
Quando il tuo RDBMS sta convertendo la stringa ''
a un INT deve ottenere il valore 0. Poiché 0 non è NULL, questo viene inserito.
Un test più valido sarebbe:
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);
MODIFICA
Scusa, ho letto solo a metà la tua domanda. Chiedi anche come interrompere ''
in fase di inserimento.
Il tuo primo problema è che stai inserendo STRINGS e la tabella è definita come avente campi INT. Puoi inserire vincoli sui dati che vengono inseriti, ma questi vincoli applicheranno il valore dopo una conversione in un INT. A meno che tu non voglia impedire il valore 0
dall'inserimento, non c'è nulla che tu possa fare alla tabella per impedire questo scenario.
La tua scommessa migliore è affrontare il motivo per cui stai inserendo stringhe in primo luogo. È possibile utilizzare una procedura memorizzata che prende e controlla le stringhe prima di convertirle in INT e quindi di inserirle. Oppure, meglio ancora, potresti effettuare i controlli nella tua applicazione client.
Un'opzione tecnicamente disponibile consiste nel rendere i campi CHAR campi, quindi mettere un vincolo sui campi, impedendo ''
dall'essere inserito. Lo farei fortemente sconsigliamo questo.