出錯(cuò)原因:mysql5.7之后的版本默認(rèn)設(shè)置不允許日期為空
解決方法:
- 修改mysql的sql mode
- 默認(rèn)值設(shè)置為非空值
查看sql mode
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
sql_mode常用值
ONLY_FULL_GROUP_BY:
對(duì)于GROUP BY聚合操作昵时,如果在SELECT中的列损拢,沒(méi)有在GROUP BY中出現(xiàn)竖幔,那么這個(gè)SQL是不合法的热监,因?yàn)榱胁辉贕ROUP BY從句中NO_AUTO_VALUE_ON_ZERO:
該值影響自增長(zhǎng)列的插入。默認(rèn)設(shè)置下湃交,插入0或NULL代表生成下一個(gè)自增長(zhǎng)值奸披。如果用戶 希望插入的值為0习绢,而該列又是自增長(zhǎng)的污茵,那么這個(gè)選項(xiàng)就有用了樱报。STRICT_TRANS_TABLES:
在該模式下,如果一個(gè)值不能插入到一個(gè)事務(wù)表中泞当,則中斷當(dāng)前的操作迹蛤,對(duì)非事務(wù)表不做限制NO_ZERO_IN_DATE:
在嚴(yán)格模式下,不允許日期和月份為零NO_ZERO_DATE:
設(shè)置該值襟士,mysql數(shù)據(jù)庫(kù)不允許插入零日期盗飒,插入零日期會(huì)拋出錯(cuò)誤而不是警告。ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE過(guò)程中陋桂,如果數(shù)據(jù)被零除逆趣,則產(chǎn)生錯(cuò)誤而非警告。如 果未給出該模式嗜历,那么數(shù)據(jù)被零除時(shí)MySQL返回NULLNO_AUTO_CREATE_USER:
禁止GRANT創(chuàng)建密碼為空的用戶NO_ENGINE_SUBSTITUTION:
如果需要的存儲(chǔ)引擎被禁用或未編譯宣渗,那么拋出錯(cuò)誤。不設(shè)置此值時(shí)梨州,用默認(rèn)的存儲(chǔ)引擎替代痕囱,并拋出一個(gè)異常PIPES_AS_CONCAT:
將"||"視為字符串的連接操作符而非或運(yùn)算符,這和Oracle數(shù)據(jù)庫(kù)是一樣的暴匠,也和字符串的拼接函數(shù)Concat相類似ANSI_QUOTES:?jiǎn)⒂肁NSI_QUOTES后鞍恢,不能用雙引號(hào)來(lái)引用字符串,因?yàn)樗唤忉尀樽R(shí)別符
設(shè)置sql mode
SET GLOBAL sql_mode = 'modes...';
SET SESSION sql_mode = 'modes...';