J'ai une table de base de données contenant des dates
(`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00').
J'utilise MySQL. Depuis le programme, les données sont parfois transmises sans date à la base de données. Ainsi, la valeur de date est automatiquement affectée 0000-00-00 00:00:00
lorsque les données de la table sont appelées avec la colonne de date qui génère une erreur
...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......
J'ai essayé de transmettre une valeur nulle à la date lors de l'insertion de données, mais elle est attribuée à l'heure actuelle.
Existe-t-il un moyen d'obtenir le ResultSet
sans changer la structure de la table?
Que la "date" "0000-00-00" soit ou non une "date" valide n'a aucun rapport avec la question. "Il suffit de changer la base de données" est rarement une solution viable.
Les faits:
Donc, si je "change juste la base de données", des milliers de lignes de code PHP vont casser.
Les programmeurs Java doivent accepter la date zéro MySQL et ils doivent remettre une date zéro dans la base de données, lorsque d'autres langages s'appuient sur cette «fonctionnalité».
Un programmeur se connectant à MySQL doit gérer les valeurs null et 0000-00-00 ainsi que les dates valides. Changer 0000-00-00 en null n'est pas une option viable, car vous ne pouvez plus déterminer si la date devait être 0000-00-00 pour la réécriture dans la base de données.
Pour 0000-00-00, je suggère de vérifier la valeur de la date sous forme de chaîne, puis de la changer en ("y", 1), ou ("yyyy-MM-dd", 0001-01-01), ou en une valeur non valide Date MySQL (moins de 1000 ans, iirc). MySQL a une autre "fonctionnalité": les dates basses sont automatiquement converties en 0000-00-00.
Je me rends compte que ma suggestion est un kludge. Mais il en va de même pour la gestion des dates de MySQL. Et deux kludges ne font pas les choses correctement. Le fait est que de nombreux programmeurs devront gérer les dates zéro MySQL pour toujours .
la source
Ajoutez l'instruction suivante au protocole JDBC-mysql:
par exemple:
la source
Au lieu d'utiliser de fausses dates comme
0000-00-00 00:00:00
ou0001-01-01 00:00:00
(cette dernière doit être acceptée car il s'agit d'une date valide), modifiez le schéma de votre base de données pour autoriser lesNULL
valeurs.la source
En guise de retournement supplémentaire, lorsque vous ne pouvez pas modifier votre colonne de date ou mettre à jour les valeurs, ou pendant que ces modifications ont lieu, vous pouvez effectuer une sélection en utilisant un cas / quand.
la source
J'ai lutté avec ce problème et mis en œuvre la solution de concaténation d'URL fournie par @Kushan dans la réponse acceptée ci-dessus. Cela a fonctionné dans mon instance MySql locale. Mais lorsque j'ai déployé mon application Play / Scala sur Heroku, cela ne fonctionnait plus. Heroku concatène également plusieurs arguments à l'URL de base de données qu'ils fournissent aux utilisateurs, et cette solution, en raison de la concaténation d'utilisation de Heroku de "?" avant leur propre ensemble d'arguments, ne fonctionnera pas. Cependant, j'ai trouvé une solution différente qui semble fonctionner aussi bien.
J'ai mis cela dans mes descriptions de table et cela a résolu le problème de '0000-00-00 00:00:00' ne peut pas être représenté comme java.sql.
la source
tu peux essayer comme ça
la source
Il n'y avait pas d'année 0000 et il n'y a pas de mois 00 ni de jour 00. Je vous suggère d'essayer
Alors qu'une année 0 a été définie dans certaines normes, elle est plus susceptible d'être déroutante qu'utile à mon humble avis.
la source
il suffit de lancer le champ en char
Par exemple: cast (updatedate) en tant que char as updatedate
la source
Je sais que cela va être une réponse tardive, mais voici la réponse la plus correcte.
Dans la base de données MySQL, modifiez votre
timestamp
valeur par défaut enCURRENT_TIMESTAMP
. Si vous avez d'anciens enregistrements avec la fausse valeur, vous devrez les corriger manuellement.la source
Vous pouvez supprimer la propriété "not null" de votre colonne dans la table mysql si ce n'est pas nécessaire. lorsque vous supprimez la propriété "non nulle", pas besoin de conversion "0000-00-00 00:00:00" et le problème a disparu.
Au moins travaillé pour moi.
la source
Je crois que c'est une aide complète pour ceux qui obtiennent ceci ci-dessous Exception sur le pompage de données via logstash Erreur: logstash.inputs.jdbc - Exception lors de l'exécution de la requête JDBC {: exception => #}
Réponse: jdbc: mysql: // localhost: 3306 / database_name? ZeroDateTimeBehavior = convertToNull "
ou si vous travaillez avec mysql
la source