日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 查数据 default无效_导入mysql数据的时候提示Field * doesn't have a default value解决方法...

發布時間:2025/3/15 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 查数据 default无效_导入mysql数据的时候提示Field * doesn't have a default value解决方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目使用django+mysql

在linux中使用的是mysql5.7,導入數據提示:Field * doesn't have a default value

想要解決問題就需要知道在mysql5.7中,啟用了嚴格模式:

在配置文件中 /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,在重新同步模型到數據庫

出現此問題的原因:

在mysql5.0.2以前,mysql對非法值檢查并不嚴厲,而且為了數據輸入還會強制將他們變為合法值。

在5.0.2以后的版本中,保留了以前的默認行為,但你可以為不良值選擇更傳統的處理方法,從而使得服務器能夠拒絕并放棄出現不良值的語句。

mysql 默認行為和新的嚴格sql模式和區別:

如果未使用嚴格模式,下面的情況是合法的。如果將不正確的值插入到列,如將null值插入非null列,或將過大的數據插入數值列,mysql 會將這些列設置為最可能的值,而不是拋出錯誤信息。

如果視圖將超過范圍的值保存到數值列,mysql服務器將保存0(最小的可能值)取而代之,或最大的可能值。

對于字符串,mysql 或保存空字符串,或將字符串可能多的部分保存到列中。

如果打算將不是以數值開頭的字符串保存到數值列,mysql將保存0。

mysql允許將特定的不正確日期值保存到DATE和DATETIME列(如:“2000-02-31” 或 “2000-02-00”)。其觀點在于,驗證日期不是sql服務器你的值。如果mysql能保存日期值并且準確檢索相同的值,mysql就能按給定的值保存它。如果日期錯誤(超出服務器能保存的范圍)將在列中保存特殊的日期值“0000-00-00”取而代之。

如果視圖將null值保存到不接受null值的列,對于單行insert語句,將出現錯誤。對于多行insert語句或者insert into...select語句,mysql服務器會保存針對列數據類型的隱含默認值。一般情況下,對于數值類型,它是0,對于字符串類型,它是空字符串(‘’),對于日期和時間類型是“zero”。

如果insert語句未為列指定值,如果列定義包含明確的default子句,mysql將插入默認值。如果在定義中沒有這類default子句,mysql 會插入列數據類型的隱含默認值。

采用前描述規則的原因在于,在語句開始執行前,無法檢查這些情況。如果在更新了舒航后遇到這類問題,我們不能僅靠回滾解決,這是因為存儲引擎可能不支持回滾。種植語句并不是良好的選擇,在該情況下,更新完成了“一半”,這或許是最差的情況。對于本例,較好的方式是“盡可能做到最好”,就像什么都沒有發生那樣繼續執行。

在mysql 5.0.2以后的版本中,可以使用STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES sql模式,選擇更嚴格的處理方式。

STRICT_TRANS_TABLES的工作方式:

對于事物性存儲引擎,在語句中任何地方出現的不良數據值俊輝導致放棄語句并執行回滾。

對于非事物性存儲引擎,如果錯誤出現再要插入或更新的第一行,將放棄語句。(這種情況下,可以認為語句未改變表,就像事物表一樣)。首行后出現的錯誤不會導致放棄執行語句。取而代之的是,將調整不良數據值,并給出警告,而不是錯誤。換句話講,使用STRICT_TRANS_TABLES后,錯誤值會導致mysql執行回滾操作,如果可以,所有更新到此為止。

要想執行更嚴格的檢查,請啟用STRICT_ALL_TABLES。除了非事務性存儲引擎,它與STRICT_TRANS_TABLES等同,即使當不良數據出現在首行后的其他行,所產生的錯誤也會導致放棄執行語句。這意味著,如果錯誤出現在非事務性表多行插入或更新過程之中,僅更新部分結果,前面的行將完成插入或更新,但錯誤出現點后面行為則不然。對于非事務性表,為了避免這種情況的發生,可使用單行語句,或者在能接受轉換警告而不是錯誤的情況下使用STRICT_TRANS_TABLES。要想在第1場合防止問題的出現,不要使用mysql來檢查列的內容。最安全的方式是,讓應用程序負責,僅將有效值傳遞給數據庫。

有了嚴格的模式選項后,可使用insert ignore 或 update ignore 而不是不帶ignore的insert或update,將錯誤當做警告對待。

總結

以上是生活随笔為你收集整理的mysql 查数据 default无效_导入mysql数据的时候提示Field * doesn't have a default value解决方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。