2016-09-17 5 views
0
CREATE TABLE seckill (
    `seckill_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '商品库存id', 
    `name` VARCHAR(120) NOT NULL COMMENT '商品名称', 
    `number` INT NOT NULL COMMENT '库存数量', 
    `start_time` TIMESTAMP NOT NULL COMMENT '开始时间', 
    `end_time` TIMESTAMP NOT NULL COMMENT '结束时间', 
    `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 
    PRIMARY KEY (seckill_id), 
    KEY idx_start_time(start_time), 
    KEY idx_end_time(end_time), 
    KEY idx_create_time(create_time) 
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='秒杀库存表'; 

Когда я пытаюсь создать таблицу с предыдущим запросом, это ошибка, я получаю:ERROR 1067 (42000): Недопустимое значение по умолчанию для 'END_TIME'

ERROR 1067 (42000): Недопустимое значение по умолчанию для «end_time»

Как я могу решить эту проблему?

+1

Я не могу читать по-китайски (? Японски) хорошо, но вы должны либо использовать арабские цифры для вашего времени, или найти способ переключения кодировки, чтобы ваш MySQL может читать Кандзи. –

+0

Какую версию MySQL вы используете? Я работал над 5.6. – julienc

ответ

1

MySQL обрабатывает timestamp особым образом, что это немного трудно найти в documentation, когда вы не знаете, что вы ищете:

В MySQL, в различен типа TIMESTAMP данных в нестандартных способах от других типов данных:

  • ТШЕЗТАМР колонны явно не объявленная с атрибутом NULL, присваивается атрибут NOT NULL. (Столбцы других типов данных, если явно не объявлены как NOT NULL, разрешают значения NULL.) Установка такого столбца в NULL устанавливает его в текущую временную метку.

  • Первый столбец TIMESTAMP в таблице, если он не объявлен с атрибутом NULL или явным предложением DEFAULT или ON UPDATE, автоматически присваивается атрибутам DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP.

  • Столбцы TIMESTAMP, следующие за первым, если не объявлены с атрибутом NULL или явным предложением DEFAULT, автоматически назначаются DEFAULT '0000-00-00 00:00:00' (отметка «нуль»). Для вставленных строк, которые не указывают явного значения для такого столбца, столбцу присваивается «0000-00-00 00:00:00», и никаких предупреждений не возникает.

Тех нестандартных поведений остается по умолчанию для TIMESTAMP но из MySQL 5.6.6 устарели, и это предупреждение появляется при запуске:

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. 
Please use --explicit_defaults_for_timestamp server option 
(see documentation for more details). 

Это означает, что ваш второй timestamp not null столбец получит неявный значение по умолчанию '0000-00-00 00:00:00', что недопустимо в сочетании с режимами NO ZERO DATE и strict sql (что по умолчанию включено в MySQL 5.7) и приводит к ошибке.

Чтобы решить вашу проблему, включите опцию --explicit_defaults_for_timestamp. Он обрабатывает столбцы timestamp, как вы ожидали (и будет по-прежнему работать по умолчанию в любом будущем выпуске MySQL), или разрешить им быть null.

0

Чтобы решить вашу проблему:

set @@session.explicit_defaults_for_timestamp=on; 
Смежные вопросы