时间戳字段的默认值无效(mysql 5.7)


10

编辑:从mysql 5.6更新现有数据库并执行时:

UPDATE phppos_register_log SET shift_end = '2015-01-01 00:00:00' WHERE shift_end = '0000-00-00 00:00:00';

这将产生:

#1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'shift_end' at row 1
#1067 - Invalid default value for 'shift_start' 

这在mysql <= 5.7中起作用。我找不到与此相关的任何文档...这是什么问题?

CREATE TABLE `phppos_register_log` (
      `register_log_id` int(10) NOT NULL AUTO_INCREMENT,
      `employee_id_open` int(10) NOT NULL,
      `employee_id_close` int(11) DEFAULT NULL,
      `register_id` int(11) DEFAULT NULL,
      `shift_start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `shift_end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `open_amount` decimal(23,10) NOT NULL,
      `close_amount` decimal(23,10) NOT NULL,
      `cash_sales_amount` decimal(23,10) NOT NULL,
      `total_cash_additions` decimal(23,10) NOT NULL DEFAULT '0.0000000000',
      `total_cash_subtractions` decimal(23,10) NOT NULL DEFAULT '0.0000000000',
      `notes` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      `deleted` int(1) NOT NULL DEFAULT '0',
      PRIMARY KEY (`register_log_id`),
      KEY `phppos_register_log_ibfk_1` (`employee_id_open`),
      KEY `phppos_register_log_ibfk_2` (`register_id`),
      KEY `phppos_register_log_ibfk_3` (`employee_id_close`),
      CONSTRAINT `phppos_register_log_ibfk_1` FOREIGN KEY (`employee_id_open`) REFERENCES `phppos_employees` (`person_id`),
      CONSTRAINT `phppos_register_log_ibfk_2` FOREIGN KEY (`register_id`) REFERENCES `phppos_registers` (`register_id`),
      CONSTRAINT `phppos_register_log_ibfk_3` FOREIGN KEY (`employee_id_close`) REFERENCES `phppos_employees` (`person_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

1
这个问题已经记录在案...但是首先,您正在使用哪个 MySQL 5.7 版本(特别相关,因为5.7到目前为止还没有GA)?并且在5.7.4中引入了一个错误构想的更改,在5.7.8中进行了还原,这可以解释这一点。请确认您的版本。
Michael-sqlbot

mysql-5.7.8-rc-osx10.9-x86_64.dmg
Chris Muench

我发布了另一个问题的编辑。这似乎是mysql 5.7.8的真实问题
Chris Muench

2
5.7.8发行说明的进一步检查表明,已还原了一项更改,但您可能需要删除NO_ZERO_DATE,这是默认配置的一部分。你可否确认?请SELECT @@SQL_MODE;
Michael-sqlbot

是的,我更改了模式,并且有效。我发现很多增加了导致问题的mysql 5.7的事情,因此我将模式设置为“”;这似乎是一个很大的更新,但有很多更改。
克里斯·穆恩奇

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.