mysql建表報錯:invalid?default?value?for?'date'的解決方法
問題描述
在執(zhí)行sql建表腳本時,出現(xiàn)了“invalid default value for ‘end_date’ ”錯誤,導(dǎo)致腳本執(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 '同步結(jié)束時間', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
錯誤提示
原因解析
mysql5.7對sql_mode的設(shè)置比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’ ”是不被允許的,所以導(dǎo)致該錯誤提示。
可以通過 select @@sql_mode; 查看自己的mysql設(shè)置的sql_mode的值。
sql_mode 使得 sql 語句更嚴謹,但是又會帶來老版本的不兼容問題,所以可以設(shè)置sql_mode的值使得新版本兼容老版本的sql腳本。
解決方案
既然是那兩個sql_mode參數(shù)導(dǎo)致的問題,那就將兩個參數(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è)置參數(shù)值按照項目要求。
解決方法有如下幾種:
1、暫時解決方案,可以在該會話(session)中暫時修改其sql_mode參數(shù),但是會話結(jié)束,下一次會話,修改的參數(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方式,設(shè)置全局sql_mode參數(shù),設(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的設(shè)置就修改,沒有就添加sql_mode:
然后重啟mysql,例如linux下執(zhí)行mysql重啟命令:
systemctl restart mysqld
總結(jié)
到此這篇關(guān)于mysql建表報錯:invalid default value for 'date'解決的文章就介紹到這了,更多相關(guān)mysql invalid default value for 'date'內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql將查詢結(jié)果集轉(zhuǎn)換為JSON數(shù)據(jù)的實例代碼
這篇文章主要介紹了Mysql將查詢結(jié)果集轉(zhuǎn)換為JSON數(shù)據(jù)的實例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Sql group by 分組取時間最新的一條數(shù)據(jù)(示例代碼)
這篇文章主要介紹了Sql group by 分組取時間最新的一條數(shù)據(jù),本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-04-04Mysql連接無效(invalid connection)問題及解決
這篇文章主要介紹了Mysql連接無效(invalid connection)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲詳解
這篇文章主要給大家介紹了利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲的相關(guān)資料,文中詳細介紹了pt-heartbeat、監(jiān)控原理以及安裝過程等的相關(guān)內(nèi)容,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06mysql實現(xiàn)批量修改字段null值改為空字符串
這篇文章主要介紹了mysql實現(xiàn)批量修改字段null值改為空字符串,具有很好的參考價值,希望對大家有所幫助。2022-08-08推薦沒有虛擬主機的小巧的Mysql數(shù)據(jù)庫備份腳本(PHP)
推薦沒有虛擬主機的小巧的Mysql數(shù)據(jù)庫備份腳本(PHP)...2007-07-07