Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/06/2011, 07:01
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: 16 años, 5 meses
Puntos: 2658
Respuesta: MySQL pide valor por defecto a un BLOB y es imposible

Bonita idea, pero tiene el problema de que con eso lo que haces es "puentear" las restricciones de NOT NULL, que pueden ser requerimientos de diseño.
Como práctica me parece algo chapucera. Yo prefiero la opción de declarar NULL aquellos campos que son opcionales para un insert.

Si te fijas con cuidado en el caso del Bug Track de MySQL que menciona el blog, el insert que el tipo intenta es:
Código MySQL:
Ver original
  1. insert into $table (product, amount) value ('test', 100);
Pero la tabla tiene esta definición:
Código MySQL:
Ver original
  1. CREATE TABLE `ttt` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `productcode` varchar(55) NOT NULL,
  4.   `amount` int(11) NOT NULL default '0',
  5.   `desc` varchar(255) NOT NULL,
  6.   PRIMARY KEY  (`id`)
  7. )  ENGINE=MyISAM DEFAULT CHARSET=latin1
Lo que significa que esa tabla expresamente indica que no se puede dejar como NULL, y además en caso de hacerlo, no tiene definido el valor por default.
Para evitar el problema, simplemente debería haber hecho esto:
Código MySQL:
Ver original
  1. CREATE TABLE `ttt` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `productcode` varchar(55) NOT NULL DEFAULT '',
  4.   `amount` int(11) NOT NULL default '0',
  5.   `desc` varchar(255) NOT NULL DEFAULT '',
  6.   PRIMARY KEY  (`id`)
  7. )  ENGINE=MyISAM DEFAULT CHARSET=latin1
O directamente dejar que puedan ser NULL:
Código MySQL:
Ver original
  1. CREATE TABLE `ttt` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `productcode` varchar(55) NULL,
  4.   `amount` int(11) NULL default '0',
  5.   `desc` varchar(255) NULL,
  6.   PRIMARY KEY  (`id`)
  7. )  ENGINE=MyISAM DEFAULT CHARSET=latin1

Puntualmente en tu caso mi consejo sería que definas ese campo como NULL, y no NOT NULL, como ya te dije.

Piensa que la restricción de NOT NULL es una restricción que se usa en el diseño de bases de datos para evitar la inconsistencia de datos en determinados sistemas. Modificar la forma de respuesta del servidor de la base para evitarla te puede traer en el futuro serios problemas que aún no conoces.
Además, el hecho de que tu modifiques tu servidor, no implica que puedas hacer lo mismo con los servidores de hosting que puedas usar después. Esos seguirán teniendo esas restricciones precisamente porque son necesarias.
Toma nota de un detalle importante, el que le responde a la usuaria, un tal Miguel Solorzano, en ningún momento le dice que cambie el my.ini, sino que lo setee temporalmente dentro del funcionamiento. Una alteración en el my.ini es crítica, pero eso a ella parece no importarle.

Detalle a tener en cuenta: Ese "error" que está documentado en el BugTrack, es de un post de 2005. Seis años atrás...

Nota final: Que alguien publique algo en un blog, no significa que no sea un chapucero...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/06/2011 a las 07:07