Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Eu configurei uma coluna MySQL para NOT NULL, mas ainda posso inserir um valor vazio


CADEIA VAZIA

No ORACLE uma string vazia é usada para representar NULO. Em praticamente todo o resto, no entanto, uma string vazia ainda é uma string e, portanto, não é NULL.




INTS

No seu caso, você está inserindo STRINGS em uma coluna INT. Isso força um implícito operação CAST.

Quando seu RDBMS está convertendo a string '' para um INT ele deve receber o valor 0. Como 0 não é NULL, este é inserido.

Um teste mais válido seria:
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);




EDITAR

Desculpe, li apenas metade da sua pergunta. Você também pergunta como parar '' sendo inserido.

Seu primeiro problema é que você está inserindo STRINGS e a tabela está definida como tendo campos INT. Você pode colocar restrições nos dados inseridos, mas essas restrições serão aplicadas ao valor depois uma conversão para um INT. A menos que você queira evitar o valor 0 de também ser inserido, não há nada que você possa fazer na tabela para evitar esse cenário.

Sua melhor aposta é abordar por que você está inserindo strings em primeiro lugar. Você pode usar um procedimento armazenado que recebe e verifica as strings antes de convertê-las em INTs e inseri-las. Ou, melhor ainda, você pode fazer as verificações em seu aplicativo cliente.

Uma opção tecnicamente disponível é tornar os campos CHAR campos, depois colocar uma restrição nos campos, evitando que '' de ser inserido. Eu fortemente recomendo contra isso.