前幾天,在本地做完專案,測試完畢後,上傳到線上伺服器的時候,在做很多寫入資料庫的操作時,發現全部發生500報錯,返回的報錯資訊是,
某個字段沒有預設值,寫入的時候沒有新增這個字段,該字段在資料表中是not null並且無預設值,導致插入失敗。
查詢原因是從本地上傳伺服器專案時,伺服器資料庫由原來的5.6公升級為5.7,mysql配置檔案中的sql_mode配置中strict_trans_tables這個配置在限制寫入庫。
strict_trans_tables(儲存引擎啟用嚴格模式,非法資料值被拒絕):
啟用這個就會報錯,
所以修改sql_mode去掉strict_trans_tables,測試了一下恢復正常。
先在資料庫查詢sql_mode:
select @@global.sql_mode;
發現sql_mode中含有strict_trans_tables。
然後在自己的伺服器中開啟mysql.conf(泛指資料庫配置檔案)加入下面這一行:
sql_mode='no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution'
總結:在設計資料庫的時候,要嚴謹新增字段,如果設定某個欄位不為null時,要給該字段新增上預設值,這樣也不會發生寫入的時候報錯的問題。
by as
django資料庫設定sql mode
從mysql 5.7開始,在mysql 5.6剛安裝時,sql mode選項的預設值包含strict trans tables。當資料在插入時被截斷時,該選項會將警告公升級為錯誤,因此django強烈建議啟用mysql的嚴格模式,以防止資料丟失 strict trans tables或strict ...
MySQL資料庫中的sql mode欄位
only full group by欄位是對於group by聚合操作的,如果在select子句中,沒有在group by 現,那麼這個sql是不合法的,因為列不在group by從句中。no auto value on zero欄位影響的是自增長列的插入,預設設定下,插入0或者null代表生成下乙...
MySQL資料庫的鎖引發的問題
在少量資料進行測試乙個update和insert頻繁操作表的時候,執行良好。但是最近在實際運營中,資料量可能過大,導致很可能出現死鎖現象。color red 通過匯出process list看,可以看到多個update操作語句的狀態為locked。導致的後果就是系統執行變慢,使用者的update操作...