Исправление ошибки CDbCommand: Invalid datetime format для CURRENT_TIMESTAMP

Я столкнулся с проблемой при добавлении записи в унаследованный проект. При попытке вставить данные без указания значений для некоторых полей система возвращает ошибку выполнения SQL-запроса.

Суть проблемы

Сервер базы данных выдаёт следующую ошибку:
CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: current_timestamp()

Анализ структуры таблицы

В определении таблицы (DDL) присутствуют два поля с автоматическим заполнением даты и времени:

  • date_create DATETIME DEFAULT CURRENT_TIMESTAMP - устанавливает текущую дату и время при создании записи
  • date_update DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP - автоматически обновляется при изменении записи

Вероятные причины ошибки

Проблема может быть вызвана одной из следующих причин:

  • Версия MySQL/ MariaDB: Поддержка CURRENT_TIMESTAMP в качестве значения по умолчанию для типа DATETIME появилась в MySQL 5.6.5 и MariaDB 10.0.1. В более ранних версиях эта функция доступна только для типа TIMESTAMP.
  • Режим SQL: Строгий режим SQL (STRICT_TRANS_TABLES) может блокировать использование неподдерживаемых значений по умолчанию.
  • Конфликт версий: Несоответствие между версией СУБД, в которой создавалась структура базы, и текущей рабочей версией.

Решение проблемы

Рекомендую предпринять следующие шаги:

  1. Проверить версию СУБД: Убедитесь, что используете MySQL 5.6.5+ или MariaDB 10.0.1+.
  2. Изменить тип полей: Если обновление СУБД невозможно, замените тип DATETIME на TIMESTAMP для полей с автоматическим заполнением.
  3. Пересмотреть DDL: Альтернативный вариант - явно указывать значения дат в приложении или использовать триггеры базы данных.

После применения корректировок проблема с выполнением SQL-запроса должна быть устранена, и вставка записей с автоматическим заполнением полей даты будет работать корректно.