Неверное значение по умолчанию для поля метки времени create_date

186

У меня есть следующий SQL создать заявление

mysql> CREATE  TABLE IF NOT EXISTS `erp`.`je_menus` (
    ->   `id` INT(11) NOT NULL AUTO_INCREMENT ,
    ->   `name` VARCHAR(100) NOT NULL ,
    ->   `description` VARCHAR(255) NOT NULL ,
    ->   `live_start_date` DATETIME NULL DEFAULT NULL ,
    ->   `live_end_date` DATETIME NULL DEFAULT NULL , 
    ->   `notes` VARCHAR(255) NULL ,
    ->   `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    ->   `created_by` INT(11) NOT NULL ,
    ->   `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    ->   `updated_by` INT(11) NOT NULL , 
    ->   `status` VARCHAR(45) NOT NULL ,
    ->   PRIMARY KEY (`id`) ) 
    -> ENGINE = InnoDB;

дает следующую ошибку

ERROR 1067 (42000): Invalid default value for 'create_date'

В чем здесь ошибка?

Роберт
источник
Я не вижу ничего плохого в вашем запросе, и он работает на только что протестированном сообществе 5.1.50.
Джасприт Чахал
Запрос в порядке и в моем конце тоже.
Шакти Сингх
Не уверен, но дайте другое имя этому полю и попробуйте?
Навин Кумар
Я использую MySQL сообщества 5.1.56 в Ubuntu 10.04. и не работает
Роберт
5
Нулевая дата требует даты. Используйте «1970-01-01 00:00:01». [взято отсюда] [1] [1]: dba.stackexchange.com/questions/6171/…
Jadeye

Ответы:

176

Это из-за режима SQL сервера - NO_ZERO_DATE .

Из справки: NO_ZERO_DATE- В строгом режиме не допустим '0000-00-00'в качестве допустимой даты. Вы все еще можете вставить нулевые даты с опцией IGNORE . Если не в строгом режиме, дата принимается, но генерируется предупреждение.

Devart
источник
19
как дать опцию игнорирования?
Роберт
9
Вы не можете игнорировать эту опцию. Это вариант сервера. Если у вас есть доступ к my.ini (конфигурационный файл mysql), удалите NO_ZERO_DATE из опции sql-mode и перезапустите сервер.
Деварт
7
Чтобы проверить эту опцию - запустите SHOW VARIABLES LIKE 'sql_mode'
Devart
6
я сгенерировал скрипт, используя MySQL верстак. В скрипте sql_mode установлен на традиционный. Если я уберу традиционный, скрипт работает.
Роберт
17
В настройках MySQL Workbench перейдите на вкладку «Модель: MySQL». Установите для параметра «SQL_MODE, который будет использоваться в сгенерированных сценариях» значение «STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION», что решает проблему навсегда.
sgtdck