Исправление ошибки 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-запроса должна быть устранена, и вставка записей с автоматическим заполнением полей даты будет работать корректно.