Tengo una tabla de base de datos que contiene fechas
(`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00').
Estoy usando MySQL. Desde el programa a veces los datos se pasan sin la fecha a la base de datos. Por lo tanto, el valor de la fecha se asigna automáticamente 0000-00-00 00:00:00
cuando se llama a los datos de la tabla con la columna de la fecha que da error
...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......
Intenté pasar un valor nulo a la fecha al insertar datos, pero se asigna a la hora actual.
¿Hay alguna forma de obtener el ResultSet
sin cambiar la estructura de la tabla?
Si la "fecha" '0000-00-00 "es o no una" fecha "válida es irrelevante para la pregunta." Simplemente cambiar la base de datos "rara vez es una solución viable.
Hechos:
Entonces, si "solo cambio la base de datos", se romperán miles de líneas de código PHP.
Los programadores de Java deben aceptar la fecha cero de MySQL y deben volver a poner una fecha cero en la base de datos, cuando otros idiomas confían en esta "característica".
Un programador que se conecta a MySQL necesita manejar nulos y 0000-00-00, así como fechas válidas. Cambiar 0000-00-00 a nulo no es una opción viable, porque entonces ya no puede determinar si se esperaba que la fecha fuera 0000-00-00 para volver a escribir en la base de datos.
Para 0000-00-00, sugiero verificar el valor de la fecha como una cadena, luego cambiarlo a ("y", 1), o ("aaaa-MM-dd", 0001-01-01), o en cualquier valor no válido Fecha MySQL (menos del año 1000, iirc). MySQL tiene otra "característica": las fechas bajas se convierten automáticamente a 0000-00-00.
Me doy cuenta de que mi sugerencia es un error. Pero también lo es el manejo de fechas de MySQL. Y dos errores no lo hacen bien. El hecho es que muchos programadores tendrán que manejar las fechas cero de MySQL para siempre .
fuente
Agregue la siguiente declaración al protocolo JDBC-mysql:
por ejemplo:
fuente
En lugar de usar fechas falsas como
0000-00-00 00:00:00
o0001-01-01 00:00:00
(esta última debe aceptarse ya que es una fecha válida), cambie el esquema de su base de datos para permitirNULL
valores.fuente
Como respuesta final, cuando no puede hacer una modificación en su columna de fecha o actualizar los valores, o mientras se realizan estas modificaciones, puede hacer una selección utilizando un caso / cuándo.
fuente
Luché con este problema e implementé la solución de concatenación de URL aportada por @Kushan en la respuesta aceptada anteriormente. Funcionó en mi instancia local de MySql. Pero cuando implementé mi aplicación Play / Scala en Heroku, ya no funcionaría. Heroku también concatena varios argumentos a la URL de base de datos que proporcionan a los usuarios, y esta solución, debido a la concatenación de "Heroku" del uso de Heroku. antes de su propio conjunto de args, no funcionará. Sin embargo, encontré una solución diferente que parece funcionar igualmente bien.
Puse esto en las descripciones de mi tabla y resolvió el problema de '0000-00-00 00:00:00' no se puede representar como java.sql.Timestamp
fuente
puedes intentar así
fuente
No hubo año 0000 ni mes 00 ni día 00. Le sugiero que intente
Si bien el año 0 se ha definido en algunas normas, es más probable que sea confuso que útil en mi humilde opinión.
fuente
acaba de lanzar el campo como char
Por ejemplo: cast (updatedate) como char como updatedate
fuente
Sé que esta será una respuesta tardía, sin embargo, esta es la respuesta más correcta.
En la base de datos MySQL, cambie su
timestamp
valor predeterminado aCURRENT_TIMESTAMP
. Si tiene registros antiguos con el valor falso, deberá corregirlos manualmente.fuente
Puede eliminar la propiedad "no nulo" de su columna en la tabla mysql si no es necesario. cuando elimina la propiedad "no nula" no es necesario realizar la conversión "0000-00-00 00:00:00" y el problema desaparece.
Al menos funcionó para mí.
fuente
Creo que esta es una ayuda completa para quienes obtienen esto a continuación Excepción sobre el bombeo de datos a través de logstash Error: logstash.inputs.jdbc - Excepción al ejecutar la consulta JDBC {: excepción => #}
Respuesta: jdbc: mysql: // localhost: 3306 / database_name? ZeroDateTimeBehavior = convertToNull "
o si estás trabajando con mysql
fuente