タイムスタンプフィールドの無効なデフォルト値(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.8で元に戻された5.7.4で導入された誤解された変更がありました。バージョンを確認してください。
マイケル-sqlbot

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

別の問題を含む編集を投稿しました。これはmysql 5.7.8の実際の問題のようです
Chris Muench、

2
5.7.8リリースノートをさらに確認すると、1つの変更が元に戻されたが、削除が必要になる可能性があることを示唆しNO_ZERO_DATEています。これは現在、デフォルトの構成の一部です。確認できますか?してくださいSELECT @@SQL_MODE;
マイケル-sqlbot

はい私はモードを変更し、それはうまくいきました。mysql 5.7が問題の原因となるものをたくさん追加したので、モードを ""に設定しました。これは、多くの変更を加えたかなり大きなアップデートのようです。
Chris Muench、2015

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.