mysql建表報錯:invalid?default?value?for?'date'的解決方法
問題描述
在執(zhí)行sql建表腳本時,出現(xiàn)了“invalid default value for ‘end_date’ ”錯誤,導致腳本執(zhí)行失敗。
執(zhí)行的sql語句
CREATE TABLE `tb_task_site` ( `id` varchar(40) NOT NULL COMMENT 'id', `start_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '同步開始時間', `end_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '同步結束時間', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
錯誤提示

原因解析
mysql5.7對sql_mode的設置比mysql5.6更嚴格了,mysql5.6默認的sql_mode:
NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
mysql5.7默認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
其中 NO_ZERO_IN_DATE,NO_ZERO_DATE 兩個參數(shù)使得時間或日期參數(shù) 不得 使用0作默認值,也就是上面的sql中 “default ‘0000-00-00 00:00:00’ ”是不被允許的,所以導致該錯誤提示。
可以通過 select @@sql_mode; 查看自己的mysql設置的sql_mode的值。
sql_mode 使得 sql 語句更嚴謹,但是又會帶來老版本的不兼容問題,所以可以設置sql_mode的值使得新版本兼容老版本的sql腳本。
解決方案
既然是那兩個sql_mode參數(shù)導致的問題,那就將兩個參數(shù)去掉就好了。在默認的sql_mode參數(shù)去除,只剩下:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
上面參數(shù)只是例子,具體設置參數(shù)值按照項目要求。
解決方法有如下幾種:
1、暫時解決方案,可以在該會話(session)中暫時修改其sql_mode參數(shù),但是會話結束,下一次會話,修改的參數(shù)就失效,變?yōu)樵瓉淼膮?shù)。
set SQL_MODE = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
執(zhí)行完之后就可以繼續(xù)執(zhí)行建表語句,但是重啟mysql后再執(zhí)行建表語句的話依舊會報錯。
2、永久解決方案,可以通過執(zhí)行sql方式,設置全局sql_mode參數(shù),設置后效果永久生效。
set GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
3、永久解決方案,直接修改配置文件,windows系統(tǒng)的話是my.ini文件,linux的話是my.cnf文件。有sql_mode的設置就修改,沒有就添加sql_mode:

然后重啟mysql,例如linux下執(zhí)行mysql重啟命令:
systemctl restart mysqld
總結
到此這篇關于mysql建表報錯:invalid default value for 'date'解決的文章就介紹到這了,更多相關mysql invalid default value for 'date'內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Mysql將查詢結果集轉換為JSON數(shù)據(jù)的實例代碼
這篇文章主要介紹了Mysql將查詢結果集轉換為JSON數(shù)據(jù)的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Sql group by 分組取時間最新的一條數(shù)據(jù)(示例代碼)
這篇文章主要介紹了Sql group by 分組取時間最新的一條數(shù)據(jù),本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-04-04
Mysql連接無效(invalid connection)問題及解決
這篇文章主要介紹了Mysql連接無效(invalid connection)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
利用pt-heartbeat監(jiān)控MySQL的復制延遲詳解
這篇文章主要給大家介紹了利用pt-heartbeat監(jiān)控MySQL的復制延遲的相關資料,文中詳細介紹了pt-heartbeat、監(jiān)控原理以及安裝過程等的相關內容,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06
mysql實現(xiàn)批量修改字段null值改為空字符串
這篇文章主要介紹了mysql實現(xiàn)批量修改字段null值改為空字符串,具有很好的參考價值,希望對大家有所幫助。2022-08-08
推薦沒有虛擬主機的小巧的Mysql數(shù)據(jù)庫備份腳本(PHP)
推薦沒有虛擬主機的小巧的Mysql數(shù)據(jù)庫備份腳本(PHP)...2007-07-07

