MySQL: усечение данных: неверное значение даты и времени: '2006-10-01 02:22:44' - PullRequest
13 голосов
/ 27 сентября 2011

Я получаю следующее исключение при обновлении строки с использованием MySQL через JDBC:

com.mysql.jdbc.MysqlDataTruncation: усечение данных: неверное значение даты и времени: '2006-10-01 02:22: 44 '

Столбец определен как:

' created_on_service отметка времени NULL DEFAULT NULL '

Нет индексовили внешние ключи в этом столбце.

Очевидно, что это не проблема с типом данных.У меня есть значения в этой таблице как до, так и после этой даты.У меня также есть значения со временем до и после 2:22.

Ответы [ 5 ]

17 голосов
/ 28 сентября 2011

Решено.

Оказывается, что 1 октября 2006 года в Южной Австралии стало началом перехода на летнее время.Часы переводятся на час вперед в 2 часа ночи, поэтому в этот день не было 2:22 утра: они шли прямо с 2:00 до 3:01 утра.должен решить эту проблему.

4 голосов
/ 18 сентября 2014

Я исправил ту же проблему (com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'perev_start_time' at row 1), обновив JAR-файл коннектора MySQL и скопировав mysql.jar в каталог lib Tomcat.

Версия MySQL Server 5.6, а коннектор MySQL -mysql-connector-java-5.1.30-bin.jar.

2 голосов
/ 29 апреля 2014

Мы обновили сервер MySQL, но не обновили jar коннектора mysql. Мы столкнулись с этой проблемой. Позже я понял, что это из-за старой банки. Я обновил его, и эта проблема исчезла.

0 голосов
/ 21 апреля 2018

Моя проблема была вызвана DST тоже.Я исправил это, изменив тип данных столбца с timestamp на datetime.Этот ответ описывает разницу, вкратце:

  • отметка времени сохраняет время как время эпохи Unix , поэтому преобразует его в / изUTC в соответствии с часовым поясом сервера.После изменения часового пояса сервера у вас будет другая интерпретация для INSERT / UPDATE и другие результаты SELECT.Некоторые временные точки недействительны из-за перехода на летнее время;
  • datetime сохраняет время как есть, независимо от часового пояса сервера.При прохождении времени UTC, любое время является действительным (нет «дыр» в DST).

Примечание: вам, возможно, все равно придется иметь дело с «пропущенным» временем.Этот подход просто переносит ответственность с уровня БД на уровень приложения.

См. Также: Документация MySQL для TIMESTAMP vs DATETIME

0 голосов
/ 27 сентября 2011

Вы не показали точное обновление SQL.Но, может быть, вы забыли часть даты

Правильный формат: гггг-мм-дд чч: мм: сс формат

Значение даты должно быть в следующем формате 2011-11-01 12:32: 01

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...