Mysql ERROR 1067: Invalid default value for字段問(wèn)題
Mysql ERROR 1067: Invalid default value for字段
問(wèn)題
//今天把一個(gè)數(shù)據(jù)庫(kù)的sql文件導(dǎo)入到另一個(gè)數(shù)據(jù)庫(kù)出現(xiàn)以下異常:
Mysql ERROR 1067: Invalid default value for 字段
//原因是因?yàn)橹皩?dǎo)出數(shù)據(jù)里面有張表的一個(gè)日期字段默認(rèn)值為0000-00-00,導(dǎo)致現(xiàn)在的錯(cuò)誤。根本原因是 SQL_MODE 設(shè)置值的問(wèn)題
查詢數(shù)據(jù)庫(kù)有什么引擎:
select table_name,`engine` from information_schema.tables where table_schema = 'database_name';
查詢表引擎(查看MYISAM)
SELECT CONCAT(table_name,'? ', engine)?? FROM information_schema.tables WHERE table_schema="bpm" AND ENGINE="MyISAM"; ?
生成修改sql(把MYISAM改成INNODB)
select CONCAT('alter table ',table_name,' engine=InnoDB;') FROM information_schema.tables WHERE table_schema="bpm" AND ENGINE="MyISAM";
alter table taai_client_dump_date engine=InnoDB;
報(bào)此錯(cuò):ERROR 1067 (42000): Invalid default value for 'cur_date'
永久解決:
??? vi /etc/my.cnf??? //添加以下配置 ?sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
臨時(shí)解決:
set @@sql_mode ='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
MYSQL的sql_mode:
ONLY_FULL_GROUP_BY:
對(duì)于GROUP BY聚合操作,如果在SELECT中的列,沒(méi)有在GROUP BY中出現(xiàn),那么將認(rèn)為這個(gè)SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中
STRICT_TRANS_TABLES:
在該模式下,如果一個(gè)值不能插入到一個(gè)事務(wù)表中,則中斷當(dāng)前的操作,對(duì)非事務(wù)表不做任何限制
NO_ZERO_IN_DATE:
在嚴(yán)格模式,不接受月或日部分為0的日期。
如果使用IGNORE選項(xiàng),我們?yōu)轭愃频娜掌诓迦?#39;0000-00-00'。
在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告。
NO_ZERO_DATE:
在嚴(yán)格模式,不要將 '0000-00-00'做為合法日期。
你仍然可以用IGNORE選項(xiàng)插入零日期。
在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告
ERROR_FOR_DIVISION_BY_ZERO:
在嚴(yán)格模式,在INSERT或UPDATE過(guò)程中,如果被零除(或MOD(X,0)),則產(chǎn)生錯(cuò)誤(否則為警告)。
如果未給出該模式,被零除時(shí)MySQL返回NULL。
如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作結(jié)果為NULL。
NO_AUTO_CREATE_USER
防止GRANT自動(dòng)創(chuàng)建新用戶,除非還指定了密碼。
NO_ENGINE_SUBSTITUTION:
如果需要的存儲(chǔ)引擎被禁用或未編譯,那么拋出錯(cuò)誤。不設(shè)置此值時(shí),用默認(rèn)的存儲(chǔ)引擎替代,并拋出一個(gè)異常
導(dǎo)入SQL時(shí)出現(xiàn) Invalid default value for ‘XXX‘ 報(bào)錯(cuò)
問(wèn)題如上圖,在進(jìn)行建表時(shí),報(bào)錯(cuò) Invalid default value for 'XXX'
原因
MySQL的版本不同,5.6及其以下版本不支持
因?yàn)榻o了時(shí)間字段的列默認(rèn)值一個(gè) CURRENT_TIMESTAMP 默認(rèn)值,而這個(gè)默認(rèn)值在低版本的 MySQL 中是不支持的,因此就出現(xiàn)了圖中的這個(gè)報(bào)錯(cuò)
`reg_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注冊(cè)時(shí)間',
解決方案
一:重裝 MySQL 數(shù)據(jù)庫(kù),版本選擇 5.7 或者 5.7 以上版本
二:將
`reg_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注冊(cè)時(shí)間',
改為
`reg_time` datetime DEFAULT NULL COMMENT '注冊(cè)時(shí)間',
即可
附圖:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL數(shù)據(jù)庫(kù)中如何查詢近一年的數(shù)據(jù)
最近碰到一個(gè)需求是統(tǒng)計(jì)某張表的數(shù)據(jù),統(tǒng)計(jì)時(shí)間維度為近一年,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)中如何查詢近一年的數(shù)據(jù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07mysql數(shù)據(jù)庫(kù)添加用戶及分配權(quán)限具體實(shí)現(xiàn)
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)添加用戶及分配權(quán)限的方法,需要的朋友可以參考下2014-02-02關(guān)于MySQL中savepoint語(yǔ)句使用時(shí)所出現(xiàn)的錯(cuò)誤
這篇文章主要介紹了關(guān)于MySQL中savepoint語(yǔ)句使用時(shí)所出現(xiàn)的錯(cuò)誤,字符串出現(xiàn)e時(shí)所產(chǎn)生的問(wèn)題也被作為MySQL的bug進(jìn)行過(guò)提交,需要的朋友可以參考下2015-05-05Mysql更新varchar存儲(chǔ)Json數(shù)據(jù)的操作方法
這篇文章主要介紹了Mysql更新varchar存儲(chǔ)Json數(shù)據(jù)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12MySQL中的GROUP_CONCAT()函數(shù)詳解與實(shí)戰(zhàn)應(yīng)用小結(jié)(示例詳解)
本文介紹了MySQL中的GROUP_CONCAT()函數(shù),詳細(xì)解釋了其基本語(yǔ)法、應(yīng)用示例以及ORDERBY和SEPARATOR參數(shù)的使用方法,此外,還提到了該函數(shù)的性能限制和注意事項(xiàng),感興趣的朋友一起看看吧2025-02-02MySQL數(shù)據(jù)庫(kù)簡(jiǎn)介與基本操作
這篇文章介紹了MySQL數(shù)據(jù)庫(kù)與其基本操作,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05MySQL開(kāi)啟記錄執(zhí)行過(guò)的SQL語(yǔ)句方法
這篇文章主要介紹了MySQL開(kāi)啟記錄執(zhí)行過(guò)的SQL語(yǔ)句方法,配置的方法很簡(jiǎn)單,本文直接給出配置示例,需要的朋友可以參考下2015-07-07