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.