1. 程式人生 > >解決:mysql timestamp默認值0000-00-00 00:00:00 報錯

解決:mysql timestamp默認值0000-00-00 00:00:00 報錯

warn session amp 查看 war ref etime details tail

一. 問題的引出

我們在用mysql5.7創建表時,如果把timestamp(時間戳)的默認值設置為0000-00-00 00:00:00 的形式,將會產生一條報錯:

  `RepaymentDate` timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 回款日期,

報錯信息如下:

[Err] 1067 - Invalid default value for RepaymentDate

二. 找出原因

這個問題和mysql中sql_mode有關系,我們可以采用兩種方法來查看它的值

方法一

mysql> select @@sql_mode;
+---------------+-----------------------------------------------------------------------------------------------
---------------+ | Variable_name | Value | +---------------+----------------------------------------------------------------------------------------------- ---------------+ | sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGIN E_SUBSTITUTION
| +---------------+----------------------------------------------------------------------------------------------- ---------------+ 1 row in set, 1 warning (0.01 sec)

方法二

mysql> select @@sql_mode;
+--------------------------------------------------------------------------------------------------------------+
| @@sql_mode | +--------------------------------------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +--------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

我們可以看到,默認會有:NO_ZERO_IN_DATE 和 NO_ZERO_DATE 兩個值,限制字段不能為零日期

三. 問題的解決

網上有兩種方法來解決這個問題

一種是修改配置文件

mysql5.7 版本中 timestamp 不能為零日期 以及sql_mode合理設置

Mysql 數據庫date, datetime類型設置0000-00-00默認值報錯問題

然而不知為何,修改配置文件,卻不能成功

第二種是執行命令

MySQL中Invalid default value for ‘0000-00-00 00:00:00‘問題

mysql> set session sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

親測這個是可以的:)

解決:mysql timestamp默認值0000-00-00 00:00:00 報錯