Ver Mensaje Individual
  #14 (permalink)  
Antiguo 10/01/2015, 08:59
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Pues mira, vamos a hacer una prueba sobre la base de tu propia tabla, conforme la posteaste.
Para el ejemplo, eliminaré las referencias a las FK, porque no posteaste las tablas, pero a los efectos de la prueba son irrelevantes.
También eliminaré ese "USING BTREE", que francamente no sé por que definiste así. Es innecesario.
Una vez creada realizaré un insert en que pondré todos los campos NOT NULL, ecepto el que te preocupa.

Primero creamos la tabla:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS pedidos;
  2. Query OK, 0 rows affected (0.33 sec)
  3.  
  4. mysql> CREATE TABLE IF NOT EXISTS `pedidos` (
  5.     ->   `cod_cliente` int(10) unsigned NOT NULL AUTO_INCREMENT,
  6.     ->   `razon_social` varchar(200) NOT NULL,
  7.     ->   `tal_pedido` varchar(45) DEFAULT NULL,
  8.     ->   `nro_pedido` int(45) NOT NULL,
  9.     ->   `fech_pedido` varchar(45) NOT NULL,
  10.     ->   `nro_o_comp` varchar(45) DEFAULT NULL,
  11.     ->   `cod_articulo` int(11) NOT NULL,
  12.     ->   `descripcion` varchar(45) NOT NULL,
  13.     ->   `desc_adici` varchar(45) DEFAULT NULL,
  14.     ->   `unidad` varchar(45) NOT NULL,
  15.     ->   `cant_pedid` int(11) NOT NULL,
  16.     ->   `can_pendes` varchar(45) DEFAULT NULL,
  17.     ->   `can_penfac` varchar(45) DEFAULT NULL,
  18.     ->   `imp_pendie` varchar(45) DEFAULT NULL,
  19.     ->   `estado` varchar(45) DEFAULT NULL,
  20.     ->   `motivo` varchar(45) DEFAULT NULL,
  21.     ->   `descmotivo` varchar(45) DEFAULT NULL,
  22.     ->   `anulado` varchar(45) NOT NULL,
  23.     ->   `pendiente` varchar(45) NOT NULL,
  24.     ->   `observaciones` varchar(100) DEFAULT NULL,
  25.     ->   `id_orden_carga` int(10) unsigned NOT NULL,
  26.     ->   PRIMARY KEY (`cod_cliente`,`nro_pedido`,`cod_articulo`,`cant_pedid`)
  27.     -> ) ENGINE=InnoDB AUTO_INCREMENT=782744 DEFAULT CHARSET=latin1;
  28. Query OK, 0 rows affected (0.06 sec)

Código MySQL:
Ver original
  1. Luego intentamos el INSERT:
  2. mysql> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  3.     ->   `cod_articulo`, `descripcion`, `unidad`,
  4.     ->   `anulado`, `pendiente`, `id_orden_carga`)
  5.     -> VALUES (1, 'loquesea', 12, NOW(), 11, 'describe articulo', 32, 'NO', 'NO', 3333);
  6.  
  7. ERROR 1364 (HY000): Field 'cant_pedid' doesn't have a default value
Como se puede ver en la respuesta de MySQL, no admite la inserción porque el campo cant_pedido está definido como NOT NULL.

Ahora intentemos, poniendo NULL en ese campo:
Código MySQL:
Ver original
  1. mysql> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  2.     ->   `cant_pedid` , `cod_articulo`, `descripcion`, `unidad`, `anulado`, `pendiente`, `id_orden_carga`)
  3.     -> VALUES (1, 'loquesea', 12, NOW(), NULL, 11, 'describe articulo', 32, 'NO', 'NO', 3333);
  4. ERROR 1048 (23000): Column 'cant_pedid' cannot be null
  5. mysql>

Lo que esto demuestra es que si te está permitiendo insertar un valor nulo, no está siendo por la restricción, sino que sin duda estás cometiendo algún error a otro nivel.
Yo sospecho que si estás generando el INSERT por programación, no estás mandando realmente un valor NULL, sino otra cosa, por ejemplo un espacio vacío (representado por el contenido de dos apostrofes consecutivos).

Lamentablemente si ver todo lo que estas haciendo, lo mas que puedo decirte es esto. El error no está en el tipo de campo. Está en otra parte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)