Ich habe eine Datenbanktabelle mit Datumsangaben
(`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00').
Ich benutze MySQL. Vom Programm werden manchmal Daten ohne Datum an die Datenbank übergeben. Daher wird der Datumswert automatisch zugewiesen, 0000-00-00 00:00:00
wenn die Tabellendaten mit der Datumsspalte aufgerufen werden, in der ein Fehler auftritt
...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......
Ich habe versucht, beim Einfügen von Daten einen Nullwert an das Datum zu übergeben, dieser wird jedoch der aktuellen Uhrzeit zugewiesen.
Gibt es eine Möglichkeit, die zu erhalten, ResultSet
ohne die Tabellenstruktur zu ändern?
Ob das "Datum" '0000-00-00 "ein gültiges" Datum "ist oder nicht, ist für die Frage irrelevant." Nur die Datenbank ändern "ist selten eine praktikable Lösung.
Fakten:
Wenn ich also "nur die Datenbank ändere", werden Tausende von Zeilen PHP-Code unterbrochen.
Java-Programmierer müssen das MySQL-Nulldatum akzeptieren und ein Nulldatum wieder in die Datenbank aufnehmen, wenn andere Sprachen auf diese "Funktion" angewiesen sind.
Ein Programmierer, der eine Verbindung zu MySQL herstellt, muss null und 0000-00-00 sowie gültige Daten verarbeiten. Das Ändern von 0000-00-00 in null ist keine praktikable Option, da Sie dann nicht mehr feststellen können, ob das Datum für das Zurückschreiben in die Datenbank voraussichtlich 0000-00-00 war.
Für 0000-00-00 empfehle ich, den Datumswert als Zeichenfolge zu überprüfen und ihn dann in ("y", 1) oder ("yyyy-MM-dd", 0001-01-01) oder in einen ungültigen Wert zu ändern MySQL-Datum (weniger als 1000 Jahre, iirc). MySQL hat eine weitere "Funktion": Niedrige Daten werden automatisch in 0000-00-00 konvertiert.
Mir ist klar, dass mein Vorschlag ein Kludge ist. Aber auch die Datumsverarbeitung von MySQL. Und zwei Kludges machen es nicht richtig. Tatsache ist, dass viele Programmierer MySQL-Nulldaten für immer verarbeiten müssen .
quelle
Fügen Sie die folgende Anweisung an das JDBC-mysql-Protokoll an:
beispielsweise:
quelle
Anstatt gefälschte Daten wie
0000-00-00 00:00:00
oder zu verwenden0001-01-01 00:00:00
(letzteres sollte akzeptiert werden, da es sich um ein gültiges Datum handelt), ändern Sie Ihr Datenbankschema, umNULL
Werte zuzulassen .quelle
Wenn Sie Ihre Datumsspalte nicht ändern oder die Werte aktualisieren können oder wenn diese Änderungen stattfinden, können Sie als Extem-Turnaround eine Auswahl anhand eines Falls / Wann vornehmen.
quelle
Ich habe mit diesem Problem gerungen und die URL-Verkettungslösung von @Kushan in der oben akzeptierten Antwort implementiert. Es hat in meiner lokalen MySql-Instanz funktioniert. Aber wenn ich meine Play / Scala-App für Heroku bereitstellte, funktionierte sie nicht mehr. Heroku verkettet auch mehrere Argumente mit der DB-URL, die sie Benutzern zur Verfügung stellen, und diese Lösung, da Heroku die Verkettung von "?" vor ihren eigenen Argumenten wird nicht funktionieren. Ich habe jedoch eine andere Lösung gefunden, die genauso gut zu funktionieren scheint.
Ich habe dies in meine Tabellenbeschreibungen aufgenommen und es hat das Problem gelöst, dass '0000-00-00 00:00:00' nicht als java.sql.Timestamp dargestellt werden kann
quelle
Sie können so versuchen
quelle
Es gab kein Jahr 0000 und es gibt keinen Monat 00 oder Tag 00. Ich schlage vor, Sie versuchen es
Während in einigen Standards ein Jahr 0 definiert wurde, ist es meiner Meinung nach eher verwirrend als nützlich.
quelle
Wirf das Feld einfach als Zeichen
Beispiel: Besetzung (aktualisiert) als Zeichen als aktualisiert
quelle
Ich weiß, dass dies eine späte Antwort sein wird, aber hier ist die richtigste Antwort.
Ändern Sie in der MySQL-Datenbank Ihren
timestamp
Standardwert inCURRENT_TIMESTAMP
. Wenn Sie alte Datensätze mit dem falschen Wert haben, müssen Sie diese manuell korrigieren.quelle
Sie können die Eigenschaft "not null" aus Ihrer Spalte in der MySQL-Tabelle entfernen, falls dies nicht erforderlich ist. Wenn Sie die Eigenschaft "not null" entfernen, ist keine Konvertierung von "0000-00-00 00:00:00" erforderlich, und das Problem ist behoben.
Zumindest für mich gearbeitet.
quelle
Ich glaube, dies ist eine vollständige Hilfe für diejenigen, die dies unten erhalten. Ausnahme beim Pumpen von Daten durch logstash Fehler: logstash.inputs.jdbc - Ausnahme beim Ausführen der JDBC-Abfrage {: exception => #}
Antwort: jdbc: mysql: // localhost: 3306 / database_name? ZeroDateTimeBehavior = convertToNull "
oder wenn Sie mit MySQL arbeiten
quelle