MySQL и MariaDB LinuxWindowsMySQL Server

MySQL: При записи даты MySQL выдаёт Incorrect datetime value

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Сообщение Incorrect datetime value появляется, когда MySQL не может принять дату в заданном формате или значение не соответствует типу столбца и действующему sql_mode. Строгий режим может отклонять значения, которые ранее приводились неявно.

В этой статье
  1. Как проявляется проблема и где искать причину
  2. Пошаговая диагностика и устранение
  3. Как проверить результат
  4. Если исправление не помогло

#Как проявляется проблема и где искать причину

Сообщение Incorrect datetime value появляется, когда MySQL не может принять дату в заданном формате или значение не соответствует типу столбца и действующему sql_mode. Строгий режим может отклонять значения, которые ранее приводились неявно.

Возможная причинаКак узнатьЧто делать
Неверный форматПриложение передаёт дату в пользовательском форматеВ запросе есть 02.11.2026 вместо SQL-форматаПривести к YYYY-MM-DD HH:MM:SS
Недопустимое значениеЧасы, месяц, день или нулевая дата вне правилОшибка на одном конкретном полеПроверять входные данные до INSERT

#Пошаговая диагностика и устранение

  1. 1. Зафиксируйте исходный параметрПо журналу приложения найдите параметр даты и имя столбца, не записывайте секреты/личные сведения. Отделите ошибку одного INSERT от ошибки при чтении.
  1. 2. Посмотрите тип столбцаВ mysql-клиенте под учётной записью чтения выполните описание проблемной таблицы и найдите тип DATETIME, TIMESTAMP или DATE. Не путайте строку с датой.
  2. Замените appdb.events; команда не меняет данные
    SQLКоманда
    Замените appdb.events; команда не меняет данные.
    SHOW COLUMNS FROM appdb.events;
  1. 3. Проверьте текущий строгий режимЗапрос покажет sql_mode сессии. Важны STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_DATE и другие режимы в зависимости от версии сервера.
  2. В mysql-клиенте; только чтение текущей сессии
    SQLКоманда
    В mysql-клиенте; только чтение текущей сессии.
    SELECT @@SESSION.sql_mode;
  1. 4. Сравните значение с SQL-форматомДля DATETIME используйте YYYY-MM-DD HH:MM:SS: например, 2026-11-02 15:40:00. Убедитесь, что время суток 00–23, минуты/секунды 00–59, число действительно существует в месяце.
  1. 5. Проверьте преобразование без записиНа тестовом соединении проверьте корректную строку через STR_TO_DATE, учитывая предупреждения сервера. Функция не записывает данные и показывает, как сервер интерпретирует строку.
  2. SQL-клиент; пример для корректной даты
    SQLКоманда
    SQL-клиент; пример для корректной даты.
    SELECT STR_TO_DATE('2026-11-02 15:40:00', '%Y-%m-%d %H:%i:%s');
  1. 6. Измените обработку в приложенииВ коде валидируйте дату до SQL, формируйте значение для нужного типа и передавайте его параметром подготовленного запроса. Если приходит строка с часовым поясом, явно преобразуйте её к принятому стандарту; для TIMESTAMP учтите временную зону сессии.
  1. 7. Проверьте редкие случаи на копииПротестируйте переход через полночь, февраль в високосный год, конец месяца, пустую строку и NULL. Для NULL проверьте, допускает ли его столбец. Неверные значения должны отклоняться приложением с понятным сообщением.
  1. 8. Контроль записи и чтенияСделайте одну пробную запись в отдельную тестовую таблицу и прочитайте значение обратно. Если разница только по времени, исследуйте timezone; если ошибка осталась, сопоставьте фактический параметр и SQL-тип.

#Как проверить результат

В тестовой базе корректные даты записываются и читаются без изменения, неверные данные отклоняются до SQL, строгий режим сохранён.

#Если исправление не помогло

При миграции со старой версии нельзя механически заменять нулевые даты текущей датой — сначала согласуйте бизнес-смысл неизвестной даты.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.