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

Incorrect datetime value: '0000-00-00 00:00:00'

Estas en el tema de Incorrect datetime value: '0000-00-00 00:00:00' en el foro de Mysql en Foros del Web. Instalé un software hace 8 años en un servidor Centos, siempre ha trabajado correctamente. Ahora se ha instalado este software en un nuevo servidor, con ...
  #1 (permalink)  
Antiguo 24/08/2018, 20:05
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 10 meses
Puntos: 21
Incorrect datetime value: '0000-00-00 00:00:00'

Instalé un software hace 8 años en un servidor Centos, siempre ha trabajado correctamente.

Ahora se ha instalado este software en un nuevo servidor, con versión MYSQL actualizada, pero recibo el siguiente error:
Cita:
Incorrect datetime value: '0000-00-00 00:00:00' for column
Una Tabla tiene una columna llamada "baja" con formato DATETIME, donde se almacena la fecha cuando el registro se determina como "baja".

Cuando no se ha dado de baja, entonces este campo contiene: '0000-00-00 00:00:00'

Se tienen rutinas que hacen búsquedas del tipo:
Código MySQL:
Ver original
  1. BETWEEN '0000-00-00 00:00:00' AND '2018-05-31 23:59:59'

¿Que puedo hacer para solucionar esto?
Me gustaría ver donde se comente este caso, si alguien tiene información.

Gracias anticipadas.
  #2 (permalink)  
Antiguo 25/08/2018, 07:18
Avatar de 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: Incorrect datetime value: '0000-00-00 00:00:00'

En primer lugar, para que MySQL te acepte un tipo de fecha como ese, el servidor debe estar configurado para aceptarlo, cosa que no siempre encontrarás asi en la mayoría de los ISP rentados. Eso se hace en la configuracion de server y requiere permisos de root.

En segundo lugar, es una mala práctica qu eun campo que determine la fecha de BAJA sea no nulable. Lo más habitual y práctico es declararlo NULL con la condicion DEFAULT NULL, y buscar los activos por su campo de baja con NULL.

Eso, por ejemplo, sería una query del tipo

Código MySQL:
Ver original
  1. SELECT a, b, c, d
  2. FOM tabla
  3. WHERE baja IS NOT NULL AND baja <= '2018-05-31 23:59:59';

O bien, si quieres las de un rango determinado:

Código MySQL:
Ver original
  1. SELECT a, b, c, d
  2. FOM tabla
  3. WHERE DATE(baja) BETWEEN DATE('2018-03-31') AND  DATE('2018-05-31');


El uso de DATE en estos contextos corta la fecha de DATETIME a DATE, evitando el detalle de tener que poner horas,minutos y segundos.

TEn presente lo que digo: La técnica usual es declarar los campos de baja como nulables y poblarlos sólo al momento de la baja. Las consultas en ese contexto son mas simples de escribir y más rápidas.
__________________
¿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 25/08/2018, 07:33
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 10 meses
Puntos: 21
Respuesta: Incorrect datetime value: '0000-00-00 00:00:00'

Excelente respuesta gnzsoloyo

Nuestros servidores son dedicados, por lo que podemos activar los permisos para fecha de BAJA no nulable, sin embargo, haré los ajustes al software para cumplir con las características de las nuevas versiones de mySQL... porque las versiones anteriores si permitían estos valores.

Te agradezco.
  #4 (permalink)  
Antiguo 25/08/2018, 08:20
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 10 meses
Puntos: 21
Respuesta: Incorrect datetime value: '0000-00-00 00:00:00'

Dos Hilos que complementan el tema:

http://www.forosdelweb.com/f18/inser...-campo-492512/
http://www.forosdelweb.com/f18/inser...pt-php-720826/

Etiquetas: datetime, 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




La zona horaria es GMT -6. Ahora son las 11:20.