mysql 查数据 default无效_导入mysql数据的时候提示Field * doesn't have a default value解决方法...
項(xiàng)目使用django+mysql
在linux中使用的是mysql5.7,導(dǎo)入數(shù)據(jù)提示:Field * doesn't have a default value
想要解決問(wèn)題就需要知道在mysql5.7中,啟用了嚴(yán)格模式:
在配置文件中 /etc/mysql/my.cnf 中找到:
sql-model=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改為:sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重啟mysql,在重新同步模型到數(shù)據(jù)庫(kù)
出現(xiàn)此問(wèn)題的原因:
在mysql5.0.2以前,mysql對(duì)非法值檢查并不嚴(yán)厲,而且為了數(shù)據(jù)輸入還會(huì)強(qiáng)制將他們變?yōu)楹戏ㄖ怠?/p>
在5.0.2以后的版本中,保留了以前的默認(rèn)行為,但你可以為不良值選擇更傳統(tǒng)的處理方法,從而使得服務(wù)器能夠拒絕并放棄出現(xiàn)不良值的語(yǔ)句。
mysql 默認(rèn)行為和新的嚴(yán)格sql模式和區(qū)別:
如果未使用嚴(yán)格模式,下面的情況是合法的。如果將不正確的值插入到列,如將null值插入非null列,或?qū)⑦^(guò)大的數(shù)據(jù)插入數(shù)值列,mysql 會(huì)將這些列設(shè)置為最可能的值,而不是拋出錯(cuò)誤信息。
如果視圖將超過(guò)范圍的值保存到數(shù)值列,mysql服務(wù)器將保存0(最小的可能值)取而代之,或最大的可能值。
對(duì)于字符串,mysql 或保存空字符串,或?qū)⒆址赡芏嗟牟糠直4娴搅兄小?/p>
如果打算將不是以數(shù)值開(kāi)頭的字符串保存到數(shù)值列,mysql將保存0。
mysql允許將特定的不正確日期值保存到DATE和DATETIME列(如:“2000-02-31” 或 “2000-02-00”)。其觀點(diǎn)在于,驗(yàn)證日期不是sql服務(wù)器你的值。如果mysql能保存日期值并且準(zhǔn)確檢索相同的值,mysql就能按給定的值保存它。如果日期錯(cuò)誤(超出服務(wù)器能保存的范圍)將在列中保存特殊的日期值“0000-00-00”取而代之。
如果視圖將null值保存到不接受null值的列,對(duì)于單行insert語(yǔ)句,將出現(xiàn)錯(cuò)誤。對(duì)于多行insert語(yǔ)句或者insert into...select語(yǔ)句,mysql服務(wù)器會(huì)保存針對(duì)列數(shù)據(jù)類(lèi)型的隱含默認(rèn)值。一般情況下,對(duì)于數(shù)值類(lèi)型,它是0,對(duì)于字符串類(lèi)型,它是空字符串(‘’),對(duì)于日期和時(shí)間類(lèi)型是“zero”。
如果insert語(yǔ)句未為列指定值,如果列定義包含明確的default子句,mysql將插入默認(rèn)值。如果在定義中沒(méi)有這類(lèi)default子句,mysql 會(huì)插入列數(shù)據(jù)類(lèi)型的隱含默認(rèn)值。
采用前描述規(guī)則的原因在于,在語(yǔ)句開(kāi)始執(zhí)行前,無(wú)法檢查這些情況。如果在更新了舒航后遇到這類(lèi)問(wèn)題,我們不能僅靠回滾解決,這是因?yàn)榇鎯?chǔ)引擎可能不支持回滾。種植語(yǔ)句并不是良好的選擇,在該情況下,更新完成了“一半”,這或許是最差的情況。對(duì)于本例,較好的方式是“盡可能做到最好”,就像什么都沒(méi)有發(fā)生那樣繼續(xù)執(zhí)行。
在mysql 5.0.2以后的版本中,可以使用STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES sql模式,選擇更嚴(yán)格的處理方式。
STRICT_TRANS_TABLES的工作方式:
對(duì)于事物性存儲(chǔ)引擎,在語(yǔ)句中任何地方出現(xiàn)的不良數(shù)據(jù)值俊輝導(dǎo)致放棄語(yǔ)句并執(zhí)行回滾。
對(duì)于非事物性存儲(chǔ)引擎,如果錯(cuò)誤出現(xiàn)再要插入或更新的第一行,將放棄語(yǔ)句。(這種情況下,可以認(rèn)為語(yǔ)句未改變表,就像事物表一樣)。首行后出現(xiàn)的錯(cuò)誤不會(huì)導(dǎo)致放棄執(zhí)行語(yǔ)句。取而代之的是,將調(diào)整不良數(shù)據(jù)值,并給出警告,而不是錯(cuò)誤。換句話(huà)講,使用STRICT_TRANS_TABLES后,錯(cuò)誤值會(huì)導(dǎo)致mysql執(zhí)行回滾操作,如果可以,所有更新到此為止。
要想執(zhí)行更嚴(yán)格的檢查,請(qǐng)啟用STRICT_ALL_TABLES。除了非事務(wù)性存儲(chǔ)引擎,它與STRICT_TRANS_TABLES等同,即使當(dāng)不良數(shù)據(jù)出現(xiàn)在首行后的其他行,所產(chǎn)生的錯(cuò)誤也會(huì)導(dǎo)致放棄執(zhí)行語(yǔ)句。這意味著,如果錯(cuò)誤出現(xiàn)在非事務(wù)性表多行插入或更新過(guò)程之中,僅更新部分結(jié)果,前面的行將完成插入或更新,但錯(cuò)誤出現(xiàn)點(diǎn)后面行為則不然。對(duì)于非事務(wù)性表,為了避免這種情況的發(fā)生,可使用單行語(yǔ)句,或者在能接受轉(zhuǎn)換警告而不是錯(cuò)誤的情況下使用STRICT_TRANS_TABLES。要想在第1場(chǎng)合防止問(wèn)題的出現(xiàn),不要使用mysql來(lái)檢查列的內(nèi)容。最安全的方式是,讓?xiě)?yīng)用程序負(fù)責(zé),僅將有效值傳遞給數(shù)據(jù)庫(kù)。
有了嚴(yán)格的模式選項(xiàng)后,可使用insert ignore 或 update ignore 而不是不帶ignore的insert或update,將錯(cuò)誤當(dāng)做警告對(duì)待。
總結(jié)
以上是生活随笔為你收集整理的mysql 查数据 default无效_导入mysql数据的时候提示Field * doesn't have a default value解决方法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql筛选字符个数为8的_听说Mys
- 下一篇: word文档基本编辑功能_word基本编