李逍遙

MYSQL ERROR 1067: Invalid default value for ‘end_time’解決

李逍遙 程序開發 2020-02-12

最近,把mysql升級到5.7了,wordpress導數據報錯。在給一個表添加字段的時候,也會忽然發現會報一個date類型的字段的默認值錯誤,郁悶~。同樣的問題可能在mysql8.0也會出現。

看看你的字段名是什么,我的是時間字段,類型是datetime。想到可能是類型的默認值被限制了,查看 sql_mode。果然:NO_ZERO_IN_DATE,NO_ZERO_DATE這兩個參數限制時間不能為0。

1.錯誤截圖

MySQL:ERROR 1067 (42000): Invalid default value for ‘end_time’

2.錯誤分析

表中的第一個TIMESTAMP列(如果未聲明為NULL或顯示DEFAULT或ON UPDATE子句)將自動分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP屬性

第一個之后的TIMESTAMP列(如果未聲明為NULL或顯示DEFAULT子句)將自動分配DEFAULT ‘0000-00-00 00:00:00′(零時間戳),這不滿足sql_mode中的NO_ZERO_DATE而報錯。

注:sql_mode有兩種,一種是空值,一種是嚴格模式,會給出很多默認設置。在MySQL5.7之后默認使用嚴格模式。

NO_ZERO_DATE:若設置該值,MySQL數據庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。

3.解決方式

方式一:先執行select @@sql_mode,復制查詢出來的值并將其中的NO_ZERO_DATE刪除,然后執行set sql_mode = ‘修改后的值’。

此方法只在當前會話中生效

方式二:先執行select @@global.sql_mode,復制查詢出來的值并將其中的NO_ZERO_DATE刪除,然后執行set global sql_mode = ‘修改后的值’。

此方法在當前服務中生效,重新MySQL服務后失效

方法三:在mysql的安裝目錄下,打開my.ini或my.cnf文件,在wamp下,MySQL 5.7里是沒有設置 SQL_MODE 的。

1.my.ini文件中找到 [mysqld]

2.如果沒有SQL_MODE,就添加,有就修改一下

sql_mode=”STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION”

或者

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3.重啟MySQL;service mysqld restart

注意:一般我推薦使用第三種方法,因為我就是用第三種方法將mysql備份后的數據導入成功的。

本文固定鏈接:http://www.yuntue.com/1468 | 云服務器網 ,轉載請注明出處!

繼續瀏覽有關 MYSQL ERROR 的文章
發表評論