sql >> Base de Datos >  >> RDS >> Mysql

Establecí una columna de MySQL en NOT NULL pero aún puedo insertar un valor vacío

CADENAS VACÍAS

En ORACLE se usa una cadena vacía para representar NULO. Sin embargo, prácticamente en todo lo demás, una cadena vacía sigue siendo una cadena y, por lo tanto, no es NULL.


INTS

En su caso, en realidad está insertando CADENAS en una columna INT. Esto obliga a un implícito Operación CAST.

Cuando su RDBMS está convirtiendo la cadena '' a un INT debe obtener el valor 0. Como 0 no es NULL, esto se inserta.

Una prueba más válida sería:

INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);


EDITAR

Lo siento, solo leí la mitad de tu pregunta. También pregunta cómo detener '' siendo insertado.

Su primer problema es que está insertando CADENAS y la tabla se define con campos INT. Puede imponer restricciones a los datos que se insertan, pero estas restricciones aplicarán el valor después una conversión a un INT. A menos que desee evitar el valor 0 de que también se inserte, no hay nada que pueda hacer en la mesa para evitar este escenario.

Su mejor apuesta es abordar por qué está insertando cadenas en primer lugar. Podría usar un procedimiento almacenado que tome y verifique las cadenas antes de convertirlas a INT y luego insertarlas. O, mejor aún, puede realizar las comprobaciones en su aplicación cliente.

Una opción técnicamente disponible es hacer que los campos sean campos CHAR, luego poner una restricción en los campos, evitando que '' de ser insertado. Lo haría fuertemente recomendar contra esto.