16 Stimmen

MySQL: Datenabschneidung: Falscher datetime-Wert: '2006-10-01 02:22:44'

Ich erhalte die folgende Ausnahme beim Aktualisieren einer Zeile mit MySQL über JDBC:

com.mysql.jdbc.MysqlDataTruncation: Datenabschneidung: Falscher Datum-Zeit-Wert: '2006-10-01 02:22:44'

Die Spalte ist definiert als:

' created_on_service Zeitstempel NULL DEFAULT NULL'

Es gibt keine Indizes oder Fremdschlüssel für diese Spalte.

Offensichtlich handelt es sich nicht um ein Problem mit dem Datentyp. Ich habe Werte in dieser Tabelle sowohl vor als auch nach diesem Zeitpunkt. Ich habe auch Werte mit Zeiten sowohl vor als auch nach 2:22 AM.

23voto

Cam Price-Austin Punkte 1688

Ich habe es gelöst.

Es stellte sich heraus, dass der 1. Oktober 2006 in Südaustralien der Beginn der Sommerzeit war. Die Uhren werden um 2.00 Uhr morgens um eine Stunde vorgestellt, so dass es an diesem Tag keine 2.22 Uhr gab: Es ging direkt von 2.00 Uhr auf 3.01 Uhr.

Ich werde die Zeitzone der Datenbank auf UTC ändern, was dieses Problem lösen sollte.

5voto

Ppacheco Punkte 51

Ich habe das gleiche Problem behoben ( com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'perev_start_time' at row 1 ), indem ich mein MySQL-Connector-JAR aktualisierte und das mysql.jar in das Tomcat-Lib-Verzeichnis kopierte.

Die Version des MySQL-Servers ist 5.6 und der MySQL-Konnektor ist mysql-connector-java-5.1.30-bin.jar .

3voto

rohit369 Punkte 401

Wir haben den MySQL-Server aktualisiert, aber nicht das mysql connector jar. Wir sind auf dieses Problem gestoßen. Später habe ich herausgefunden, dass es an dem alten Jar lag. Ich aktualisierte es und das Problem verschwand.

3voto

Nikita Bosik Punkte 806

Mein Problem wurde auch durch die Sommerzeit verursacht. Ich habe es behoben, indem ich den Datentyp der Spalte von timestamp a datetime . Diese Antwort beschreibt kurz und bündig den Unterschied:

  • Zeitstempel speichert die Zeit als Unix-Epochenzeit und konvertiert sie entsprechend der Zeitzone des Servers in/aus UTC. Sobald Sie die Zeitzone des Servers ändern, haben Sie eine andere Interpretation für INSERT / UPDATE und anders SELECT Ergebnisse. Einige Zeitpunkte sind aufgrund der Sommerzeit ungültig;
  • datetime speichert die Zeit wie sie ist, unabhängig von der Zeitzone des Servers. Bei der Übergabe der UTC-Zeit ist jede Zeit gültig (es gibt keine Sommerzeit-"Löcher").

Hinweis: Sie müssen möglicherweise immer noch mit "fehlender" Zeit rechnen. Dieser Ansatz verlagert lediglich die Verantwortung von der DB-Ebene auf die Anwendungsebene.

Siehe auch: MySQL-Dokumentation für TIMESTAMP vs. DATETIME

0voto

Gregory Nozik Punkte 3156

Sie haben kein genaues Update-SQL angegeben. Aber vielleicht haben Sie den Datumsteil vergessen

Das richtige Format ist jjjj-mm-tt hh:mm:ss

Der Datumswert sollte das folgende Format haben: 2011-11-01 12:32:01

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X