解決:mysql timestamp默認值0000-00-00 00:00:00 報錯
阿新 • • 發佈:2018-06-01
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 報錯