關於mysql 出現 1264 Out of range value for column 錯誤的解決辦法
阿新 • • 發佈:2018-09-05
lsp column 關於 需要 重新啟動 pos dml adjust 事務
今天給客服恢復mysql數據的時候。本來測試好的數據。但是到了客戶那裏卻死活不幹活了。老報錯!
1 |
INSERT INTO ka_tan4 set num= ‘716641385999‘ , username= ‘admin‘ ,adddate= ‘1353078270‘ ,rate= ‘2‘ ,sum_m= ‘500‘ ,tjrenid= ‘1259‘
|
時出現錯誤:
1 |
#1264 - Out of range value adjusted for column ‘num‘ at row 1
|
原因:
新版本的MySQL對字段的嚴格檢查。 通常在Linux下安裝完mysql後,默認的sql_mode值是空,在這種情形下mysql執行的是一種不嚴格的檢查,如果要插入的字段長度超過列定義的長度,那麽mysql不會終止操作,而是會自動截斷後面的字符繼續插入操作!但是在windows下面卻不會這樣。而是直接終止報出上面的錯誤!
解決方法(兩種方法任選一種即可):
1、修改my.ini,將
1 |
sql-mode= "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
|
改為
1 |
sql-mode= "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
|
重新啟動MySQL。
2、在執行sql語句前,先執行以下語句:
mysql_query("set sql_mode=‘‘");
3.修改mysql數據庫表結構適應數據長度,最好的辦法是修改配置文件。這樣。平臺差距就不會太大了!
經常使用的sql_mode值如下表:
Sql_mode值 | 描述 |
ANSI | 更改語法和行為,使其更符合標準SQL。 |
STRICT_TRANS_TABLES | 如果不能將給定的值插入到事務表中,則放棄該語句,對於非事務表,如果值出現在單行語句或多行語句的第一行,則放棄該語句。 |
TRADITIONAL | Make mysql的行為像“傳統”SQL數據庫系統。該模式的簡單描述是當在列中插入不正確的值時“給出錯誤而不是警告”。註釋:一旦發現錯誤立即放棄INSERT/UPDATE。如果你使用非事務存儲引擎,這種方式不是你想要的,因為出現錯誤前進行的數據更改不會“滾動”,結果是更新“只進行了一部分”。 |
說明:如果把sql_mode的值設置成後面的兩個值(即嚴格模式),那麽當在列中插入或更新不正確的值時,mysql將會給出錯誤,並且放棄insert/update操作。在我們的一般應用中建議使用這兩種模式,而不是使用默認的空或ANSI模式。但是需要註意到問題是,如果數據庫運行在嚴格模式下,並且你的存儲引擎不支持事務,那麽有數據不一致的風險存在,如:一組sql中有兩個dml語句,如果後面的一個出現了問題,但是前面的已經操作成功,那麽mysql並不能回滾前面的操作,因此說設置sql_mode需要應用人員權衡各種得失,從而得到一個合適的選擇 (CSDN)
關於mysql 出現 1264 Out of range value for column 錯誤的解決辦法