Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

MySQL pide valor por defecto a un BLOB y es imposible

Estas en el tema de MySQL pide valor por defecto a un BLOB y es imposible en el foro de Mysql en Foros del Web. Amigos: Al intentar hacer un INSERT, Mysql me exige que TODOS los campos tengan valores por defecto cosa que empezo a sucederme de un momento ...
  #1 (permalink)  
Antiguo 15/06/2011, 13:01
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Pregunta MySQL pide valor por defecto a un BLOB y es imposible

Amigos:

Al intentar hacer un INSERT, Mysql me exige que TODOS los campos tengan valores por defecto cosa que empezo a sucederme de un momento a otro!

Y me sucede SOLO en mi localhost tal como comentan en otro hilo y en este foro

La cuestion es que al intentar agregar un valor por defecto a cada campo requerido me encuentro con una incoherencia:

* MySQL me exige un valor por defecto para un BLOB

Cita:
#1364 - Field 'signature' doesn't have a default value
* MySQL me dice que... los BLOB no tienen valores por defecto

Cita:
#1101 - BLOB/TEXT column 'signature' can't have a default value
Ahi que hago ? me corto las venas con un papel o que ?
__________________
Salu2!
  #2 (permalink)  
Antiguo 15/06/2011, 13:39
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: MySQL pide valor por defecto a un BLOB y es imposible

Decláralo como NULL, no como NOT NULL.

La próxima vez postea la estructura (el CREATE TABLE), nada más que para estar seguros.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/06/2011, 06:24
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
De acuerdo Respuesta: MySQL pide valor por defecto a un BLOB y es imposible

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Decláralo como NULL, no como NOT NULL.

La próxima vez postea la estructura (el CREATE TABLE), nada más que para estar seguros.
Amigo: gracias!

El tema era de configuracion de MySQL

Cita:
sql-mode=""
en my.ini



FUENTE: este blog
__________________
Salu2!
  #4 (permalink)  
Antiguo 16/06/2011, 07:01
Avatar de 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, 4 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

Etiquetas: blog, defecto, imposible
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:55.