mysql建表報(bào)錯(cuò):invalid?default?value?for?'date'的解決方法
問(wèn)題描述
在執(zhí)行sql建表腳本時(shí),出現(xiàn)了“invalid default value for ‘end_date’ ”錯(cuò)誤,導(dǎo)致腳本執(zhí)行失敗。
執(zhí)行的sql語(yǔ)句
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 '同步開(kāi)始時(shí)間', `end_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '同步結(jié)束時(shí)間', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
錯(cuò)誤提示
原因解析
mysql5.7對(duì)sql_mode的設(shè)置比mysql5.6更嚴(yán)格了,mysql5.6默認(rèn)的sql_mode:
NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
mysql5.7默認(rèn)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 兩個(gè)參數(shù)使得時(shí)間或日期參數(shù) 不得 使用0作默認(rèn)值,也就是上面的sql中 “default ‘0000-00-00 00:00:00’ ”是不被允許的,所以導(dǎo)致該錯(cuò)誤提示。
可以通過(guò) select @@sql_mode; 查看自己的mysql設(shè)置的sql_mode的值。
sql_mode 使得 sql 語(yǔ)句更嚴(yán)謹(jǐn),但是又會(huì)帶來(lái)老版本的不兼容問(wèn)題,所以可以設(shè)置sql_mode的值使得新版本兼容老版本的sql腳本。
解決方案
既然是那兩個(gè)sql_mode參數(shù)導(dǎo)致的問(wèn)題,那就將兩個(gè)參數(shù)去掉就好了。在默認(rèn)的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ù)值按照項(xiàng)目要求。
解決方法有如下幾種:
1、暫時(shí)解決方案,可以在該會(huì)話(huà)(session)中暫時(shí)修改其sql_mode參數(shù),但是會(huì)話(huà)結(jié)束,下一次會(huì)話(huà),修改的參數(shù)就失效,變?yōu)樵瓉?lái)的參數(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í)行建表語(yǔ)句,但是重啟mysql后再執(zhí)行建表語(yǔ)句的話(huà)依舊會(huì)報(bào)錯(cuò)。
2、永久解決方案,可以通過(guò)執(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)的話(huà)是my.ini文件,linux的話(huà)是my.cnf文件。有sql_mode的設(shè)置就修改,沒(méi)有就添加sql_mode:
然后重啟mysql,例如linux下執(zhí)行mysql重啟命令:
systemctl restart mysqld
總結(jié)
到此這篇關(guān)于mysql建表報(bào)錯(cuò):invalid default value for 'date'解決的文章就介紹到這了,更多相關(guān)mysql invalid default value for 'date'內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql將查詢(xún)結(jié)果集轉(zhuǎn)換為JSON數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了Mysql將查詢(xún)結(jié)果集轉(zhuǎn)換為JSON數(shù)據(jù)的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Sql group by 分組取時(shí)間最新的一條數(shù)據(jù)(示例代碼)
這篇文章主要介紹了Sql group by 分組取時(shí)間最新的一條數(shù)據(jù),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04MySQL中字段的實(shí)際長(zhǎng)度的實(shí)現(xiàn)示例代碼
MySQL字段的存儲(chǔ)長(zhǎng)度不僅取決于數(shù)據(jù)類(lèi)型,還受字符編碼和存儲(chǔ)內(nèi)容的影響,CHAR和VARCHAR字段可以使用LENGTH()和CHAR_LENGTH()函數(shù)獲取長(zhǎng)度信息,下面就來(lái)具體介紹一下2024-09-09Mysql連接無(wú)效(invalid connection)問(wèn)題及解決
這篇文章主要介紹了Mysql連接無(wú)效(invalid connection)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲詳解
這篇文章主要給大家介紹了利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲的相關(guān)資料,文中詳細(xì)介紹了pt-heartbeat、監(jiān)控原理以及安裝過(guò)程等的相關(guān)內(nèi)容,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06mysql實(shí)現(xiàn)批量修改字段null值改為空字符串
這篇文章主要介紹了mysql實(shí)現(xiàn)批量修改字段null值改為空字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-08-08推薦沒(méi)有虛擬主機(jī)的小巧的Mysql數(shù)據(jù)庫(kù)備份腳本(PHP)
推薦沒(méi)有虛擬主機(jī)的小巧的Mysql數(shù)據(jù)庫(kù)備份腳本(PHP)...2007-07-07Mybatis動(dòng)態(tài)傳入order?by問(wèn)題
這篇文章主要介紹了Mybatis動(dòng)態(tài)傳入order?by問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12