Mysql運行模式及1690錯誤處理

Mysql運行模式及1690錯誤處理
        MySQL said: Documentation

1690 - BIGINT UNSIGNED value is out of range inmysql

通過查詢,發現這個錯誤的緣由是兩個時間字段進行減法運算時,若是有一個時間爲0000-00-00時形成的,根本緣由是由於這樣減法的結果會超過Mysql數值字段的範圍,從而觸發1690報錯。sql

ERROR 1690 Out-of-Range
當Mysql中的數字字段存儲了一個超過容許範圍的數字時,會觸發1690 Out of Range錯誤,是否觸發錯誤取決於SQL運行時的模式:運維

當標準 Standar Mode 或 Strict Mode 運行時,數據插入會失敗
當非限制模式 No Restrictive 運行時,Mysql將數值轉化爲範圍容許內的最大或最小值進行存儲ide

解決方法code

SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';文檔

在進行計算時,首先執行上面的語句,能夠避免減法運算過程當中的錯誤。在Mysql文檔中,明確指出兩個整數進行相減運算的結果是一個無符號數,在Mysql 5.5.5 以前,若是產生一個負數,mysql會將這個數轉換爲一個最大的數值。it

自Mysql 5.5.5 以後,若是產生一個負數,則會產生一個錯誤 ERROR 1690。io

關於SQL_MODE
SQL_MODE默認爲空,有不少的選項,建議在生產環境中設置成嚴格的MODE,這樣能夠在運維期間避免不少麻煩。class

相關文章
相關標籤/搜索