¿Comportamiento anómalo?

Warwing
20 de Julio del 2004
Al definir una tabla con la siguiente sintaxis:

CREATE TABLE `test` (
`id` varchar(11) NOT NULL default '',
`mandatory` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
) TYPE=InnoDB;

en la cual necesito que el campo 'mandatory' no admita valores nulos, resulta que si le efectúo las siguientes operaciones:

insert into test (id, mandatory) values ('A','A');

En el insert, MySQL no me admite que ponga NULL en el campo "mandatory" (como tiene que ser). En cambio si hago:
insert into test (id) values ('A');
primera anomalía: en el campo mandatory se inserta una cadena vacía (no un NULL). Eso parece que tiene su explicación en el hecho de que si hacemos un SHOW CREATE TABLE test; nos mostrará:

CREATE TABLE `test` (
`id` varchar(11) NOT NULL default '',
`mandatory` varchar(11) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=InnoDB;

Si os fijáis en la columna "mandatory", aunque en mi sentencia de creación no hubiera una cláusula default, parece que el gestor la presupone.

De todas maneras, todavía hay otra anomalía más preocupante. Ésta se muestra con la sentencia:

UPDATE test SET mandatory = NULL WHERE id = 'A';

El gestor se traga la sentencia con un simple warning y en el campo "mandatory" inserta, no un NULL, sino el valor de default, es decir, una cadena vacía.

¿Este comportamiento es normal? Estoy desarrollando en php contra MySQL y estaría interesado en conseguir que el gestor sea más exigente y que no considere esta operación un warning y sí un error. ¿Es eso posible? En su defecto, ¿podría detectar desde php ese warning para interpretarlo adecuadamente?

gonzalo
20 de Julio del 2004
bienbenido a mySQL!

efectivamente, es asi.
mysql intentara insertar como sea el registro.

seguro que antes se consideraba un buen comportamiento que mysql intentara insertar registros como pudiese, ya que las aplicaciones eran constantemente revisadas y actualizadas, de manera que un cambio en la base de datos supondria un fallo generalizado.

de todas formas no me agrada mucho este comportamiento de mysql.

Warwing
20 de Julio del 2004
Gracias Gonzalo,
Al menos ahora ya me queda claro que no se trata de que yo esté pasando algo por alto o bien que exista algún ajuste de MySQL que permita modificar este comportamiento.

Gracias por tu ayuda. Un saludo cordial.