Исправление ошибки 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) может блокировать использование неподдерживаемых значений по умолчанию. - Конфликт версий: Несоответствие между версией СУБД, в которой создавалась структура базы, и текущей рабочей версией.
Решение проблемы
Рекомендую предпринять следующие шаги:
- Проверить версию СУБД: Убедитесь, что используете MySQL 5.6.5+ или MariaDB 10.0.1+.
- Изменить тип полей: Если обновление СУБД невозможно, замените тип
DATETIMEнаTIMESTAMPдля полей с автоматическим заполнением. - Пересмотреть DDL: Альтернативный вариант - явно указывать значения дат в приложении или использовать триггеры базы данных.
После применения корректировок проблема с выполнением SQL-запроса должна быть устранена, и вставка записей с автоматическим заполнением полей даты будет работать корректно.