一次特殊的「VARCHAR轉numeric失敗」錯誤記錄

今天接觸到一個頗有意思的問題。當我在執行一條INSERT的sql語句時,他老是報字符串轉數字類型失敗。git

問題

首先,該表中的全部數字類型的字段都是非必填,其次,每一個數字類型的字段都有默認值。最令我感到疑惑的是,當我測試不加入那些必填字段作INSERT時,數據庫仍然報這個錯誤,這就讓我有點摸不着頭腦了,由於個人經驗是當你新增數據而沒有添加必填字段一塊兒時(這些字段沒有默認值),數據庫確定是會報這個錯誤,並且當SQL中存在其餘錯誤時,也是優先報出這種錯誤。因此今天這個錯誤讓我感到很疑惑。github

雖然很疑惑這個報錯的狀況不符合本身以往的經驗,但仍是打算循着這個錯誤描述去對每一個字段做檢查。sql

調試

首先,將INSERT語句中的非數字類型的字段及其值刪除,執行後,發現仍是會報同樣的錯誤,並且提供的全部的值都是數字。接着,查看錶中有哪些數字類型的字段,而後再查看INSERT語句中缺乏了哪一個,終於發現一個數字類型的字段不存在於INSERT中,因而添加這個字段作測試,果不其然,語句成功執行。到這裏,基本上能猜想到致使該問題的緣由了,也即,當我沒有添加該字段作新增時,語句失敗,添加後,語句成功,那麼很明顯,是該字段的默認值有問題(由於數字類型的字段在不作處理的狀況下,是不能夠保存空值的)。通過檢查,該字段的默認值是一個空字符串''。解決方法很簡單,修改其默認值爲0便可。數據庫

總結

這次遇到的這個問題,並不複雜,使得本身願意寫一篇文章的緣由主要是本身的經驗欺騙了本身。特別是在不添加必填字段執行語句時,報的錯誤竟然不是符合本身經驗的狀況,這讓本身走進了誤區。後面,本身將會去深刻的研究一下,SQL報錯時,是基於什麼優先級來處理的。測試

本篇文章由一文多發平臺ArtiPub自動發佈調試

相關文章
相關標籤/搜索