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

consulta sobre error #1364

Estas en el tema de consulta sobre error #1364 en el foro de Mysql en Foros del Web. hola camaradas! bueno tengo una duda les explico un poco Estoy desarrollando una aplicación en php y mysql todo estaba funcionando muy bien hasta que ...
  #1 (permalink)  
Antiguo 14/07/2016, 11:38
 
Fecha de Ingreso: febrero-2016
Mensajes: 43
Antigüedad: 8 años, 1 mes
Puntos: 2
consulta sobre error #1364

hola camaradas!

bueno tengo una duda les explico un poco

Estoy desarrollando una aplicación en php y mysql todo estaba funcionando muy bien hasta que tuve que migrar la aplicación a otro servidor.

ahora que ya subi el sistema junto con la base de datos al hacer pruebas de registro mysql, me arroja el error

#1364 - Field 'condicionesPago' doesn't have a default value

cabe mencionar que este error me lo arroja no en todas las tablas en otras si puedo registrar datos sin ningun problema

aqui dejo un show create table

Código SQL:
Ver original
  1. solicitud_cotizacion | CREATE TABLE `solicitud_cotizacion` (
  2.   `folioCotizacion` VARCHAR(8) NOT NULL,
  3.   `fechaCotizacion` DATE NOT NULL,
  4.   `nombreCotizacion` VARCHAR(100) NOT NULL,
  5.   `referenciaCotizacion` VARCHAR(50) NOT NULL,
  6.   `entregaCotizacion` VARCHAR(50) NOT NULL,
  7.   `periodicidadCotizacion` VARCHAR(50) NOT NULL,
  8.   `condicionesPago` INT(11) NOT NULL,
  9.   `tiempoEntrega` VARCHAR(50) NOT NULL,
  10.   `folioCliente` VARCHAR(6) NOT NULL,
  11.   `num` INT(11) NOT NULL AUTO_INCREMENT,
  12.   `status` tinyint(1) NOT NULL,
  13.   `cambios_solicitados` VARCHAR(200) NOT NULL,
  14.   `archivoPedido` VARCHAR(100) NOT NULL,
  15.   `aNombre` INT(11) NOT NULL,
  16.   `idVendor` INT(11) NOT NULL,
  17.   PRIMARY KEY (`folioCotizacion`),
  18.   UNIQUE KEY `num` (`num`),
  19.   KEY `folioCliente` (`folioCliente`),
  20.   KEY `condicionesPago` (`condicionesPago`),
  21.   KEY `idVendor` (`idVendor`)
  22. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |

he estado investigando y he encontrado algo sobre configurar my.cnf pero como es hosting no creo que pueda hacer eso??

tambien he tratado de cambiar el valor de campo a NULL y asi me va funcionando.

pero no entiendo porque anteriormente mi otro servidor si me permitia hacer los insert sin ningun problema??? que puedo hacer ante semejante barbaridad??? debo cambiar todos y cada uno de los campos a NULL???



gracias por tu ayuda!!!
  #2 (permalink)  
Antiguo 14/07/2016, 11:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta sobre error #1364

No solo ese campo porque es una llave primaria, si tienes un campo que no acepte null debe de llevar un valor default :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/07/2016, 11:57
 
Fecha de Ingreso: febrero-2016
Mensajes: 43
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: consulta sobre error #1364

Cita:
Iniciado por Libras Ver Mensaje
No solo ese campo porque es una llave primaria, si tienes un campo que no acepte null debe de llevar un valor default :)
gracias amigo ya lo cambie, ahora esta asi

Código SQL:
Ver original
  1. solicitud_cotizacion | CREATE TABLE `solicitud_cotizacion` (
  2.   `folioCotizacion` VARCHAR(8) NOT NULL,
  3.   `fechaCotizacion` DATE NOT NULL,
  4.   `nombreCotizacion` VARCHAR(100) NOT NULL,
  5.   `referenciaCotizacion` VARCHAR(50) NOT NULL,
  6.   `entregaCotizacion` VARCHAR(50) NOT NULL,
  7.   `periodicidadCotizacion` VARCHAR(50) NOT NULL,
  8.   `condicionesPago` INT(11) DEFAULT NULL,
  9.   `tiempoEntrega` VARCHAR(50) NOT NULL,
  10.   `folioCliente` VARCHAR(6) NOT NULL,
  11.   `num` INT(11) NOT NULL AUTO_INCREMENT,
  12.   `status` tinyint(1) NOT NULL,
  13.   `cambios_solicitados` VARCHAR(200) NOT NULL,
  14.   `archivoPedido` VARCHAR(100) NOT NULL,
  15.   `aNombre` INT(11) NOT NULL,
  16.   `idVendor` INT(11) NOT NULL,
  17.   PRIMARY KEY (`folioCotizacion`),
  18.   UNIQUE KEY `num` (`num`),
  19.   KEY `folioCliente` (`folioCliente`),
  20.   KEY `condicionesPago` (`condicionesPago`),
  21.   KEY `idVendor` (`idVendor`)
  22. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |

pero he vuelto hacer un insert y ahora me dice

#1364 - Field 'tiempoEntrega' doesn't have a default value

  #4 (permalink)  
Antiguo 14/07/2016, 12:02
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: consulta sobre error #1364

Código MySQL:
Ver original
  1. `condicionesPago` INT(11) NOT NULL,
Está definido como NOT NULL, sin DEFAULT, como te comenta Libras.
El problema es simplemente que no le estás pasando valores, y si no se producía antes puede ser tanto por defectos de programación que anteriormente quedaban escondidos y en el nuevo servidor no, como diferentcias en la configuracion de MySQL .

A nivel programación, puedes verificar donde falla para resolverlo. Es tema ajenos a este foro.

A nivel tabla ,se soluciona simplemente poniendole un DEFAULT ''.

En el servidor, lo mas probable es que esté en modo estricto (ver manual de referencia: https://dev.mysql.com/doc/refman/5.6...ql-mode-strict), que exige exactitud en valores, datos, rangos, etc. Eso no lo puedes controlar tu, solo el DBA de ese hosting.

TRaducido a lo bruto:

Cita:
Modo estricto SQL

El modo estricto controla cómo MySQL trata los valores inválidos o no presentes en las declaraciones de cambio de datos como INSERT o UPDATE. Un valor puede ser inválida por varias razones. Por ejemplo, se puede tener un tipo de datos incorrecto para la columna, o puede estar fuera de rango. Un valor no está presente cuando el registro sea insertado no contiene un valor para una columna no nula de que no tiene ninguna cláusula DEFAULT explícita en su definición. (Para una columna NULL, NULL se inserta si el valor no está presente.) El modo estricto también afecta a las instrucciones de DDL como CREATE TABLE.

Si el modo estricto no está en vigor, MySQL inserta valores ajustados para los valores inválidos o no y produce advertencias (véase la Sección 13.7.5.41, "VER ADVERTENCIAS sintaxis"). En modo estricto, puede producir este comportamiento usando INSERT IGNORE o UPDATE IGNORE.

En cuanto a datos como SELECT que no cambian los datos, los valores no válidos generan una advertencia en modo estricto, no es un error.

A partir de MySQL 5.6.11, el modo estricto produce un error para los intentos de crear una clave que supera la longitud máxima de la clave. Anteriormente, esto dio lugar a una advertencia y el truncamiento de la clave de la clave de longitud máxima (la misma que cuando el modo estricto no está activado).

El modo estricto no afecta si las restricciones de claves foráneas se verifican. FOREIGN_KEY_CHECKS se pueden utilizar para eso. (Véase la Sección 5.1.4, "Variables de sistema del servidor".)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/07/2016, 12:46
 
Fecha de Ingreso: febrero-2016
Mensajes: 43
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: consulta sobre error #1364

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. `condicionesPago` INT(11) NOT NULL,
Está definido como NOT NULL, sin DEFAULT, como te comenta Libras.
El problema es simplemente que no le estás pasando valores, y si no se producía antes puede ser tanto por defectos de programación que anteriormente quedaban escondidos y en el nuevo servidor no, como diferentcias en la configuracion de MySQL .

A nivel programación, puedes verificar donde falla para resolverlo. Es tema ajenos a este foro.

A nivel tabla ,se soluciona simplemente poniendole un DEFAULT ''.

En el servidor, lo mas probable es que esté en modo estricto (ver manual de referencia: [url]https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict[/url]), que exige exactitud en valores, datos, rangos, etc. Eso no lo puedes controlar tu, solo el DBA de ese hosting.

TRaducido a lo bruto:
gracias maestros por su gran ayuda me han aclarado bastante, ya cambie los campos a DEFAULT NULL y ya me inserta los valores, muchas gracias!!!

debe ser el modo estricto del servidor, encontré esta configuración no se si tenga q ver. pero investigare mas sobre el tema
sql mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

una ultima duda, espero no estar abusando

ahora mi tabla esta así

Código SQL:
Ver original
  1. solicitud_cotizacion | CREATE TABLE `solicitud_cotizacion` (
  2.   `folioCotizacion` VARCHAR(8) NOT NULL,
  3.   `fechaCotizacion` DATE NOT NULL,
  4.   `nombreCotizacion` VARCHAR(100) NOT NULL,
  5.   `referenciaCotizacion` VARCHAR(50) NOT NULL,
  6.   `entregaCotizacion` VARCHAR(50) NOT NULL,
  7.   `periodicidadCotizacion` VARCHAR(50) NOT NULL,
  8.   `condicionesPago` INT(11) DEFAULT NULL,
  9.   `tiempoEntrega` VARCHAR(50) DEFAULT NULL,
  10.   `folioCliente` VARCHAR(6) NOT NULL,
  11.   `num` INT(11) NOT NULL AUTO_INCREMENT,
  12.   `status` tinyint(1) DEFAULT NULL,
  13.   `cambios_solicitados` VARCHAR(200) DEFAULT NULL,
  14.   `archivoPedido` VARCHAR(100) DEFAULT NULL,
  15.   `aNombre` INT(11) NOT NULL,
  16.   `idVendor` INT(11) NOT NULL,
  17.   PRIMARY KEY (`folioCotizacion`),
  18.   UNIQUE KEY `num` (`num`),
  19.   KEY `folioCliente` (`folioCliente`),
  20.   KEY `condicionesPago` (`condicionesPago`),
  21.   KEY `idVendor` (`idVendor`)
  22. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |

y mi insert esta así

Código SQL:
Ver original
  1. INSERT INTO solicitud_cotizacion (folioCotizacion,fechaCotizacion,nombreCotizacion,referenciaCotizacion,entregaCotizacion,periodicidadCotizacion,folioCliente,aNombre,idVendor) VALUES ('2900a11j','2016-07-14','trabajo de prueba','','5','semanal','f47a6c','1','1');

si lo ejecuto me inserta el registro sin ningún problema.

mi duda esta en el campo referenciaCotizacion no lo cambie, esta como NOT NULL y aquí no me manda el error 1364, que estará pasando en este caso
  #6 (permalink)  
Antiguo 14/07/2016, 12:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta sobre error #1364

Un NULL es diferente a un '' que es lo que estas mandando en tu insert, un NULL es una ausencia de valor, o sea un valor que no existe, mientras que '' es un caracter en blanco que no es lo mismo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 14/07/2016, 13:09
 
Fecha de Ingreso: febrero-2016
Mensajes: 43
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: consulta sobre error #1364

Cita:
Iniciado por Libras Ver Mensaje
Un NULL es diferente a un '' que es lo que estas mandando en tu insert, un NULL es una ausencia de valor, o sea un valor que no existe, mientras que '' es un caracter en blanco que no es lo mismo :)
si ya vi, ya vi gracias master !!!

ahora veo con mas claridad

disculpen mis novatadas pero estoy muy verde todavía tengo mucho que aprender

GRACIASSSSS!!!

Etiquetas: campo, fecha, php, sql, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:05.