Mysql
 sql >> Database >  >> RDS >> Mysql

Ho impostato una colonna MySQL su NOT NULL ma posso comunque inserire un valore vuoto

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.