資料庫int欄位超限

weixin_33866037發表於2017-03-27

今天碰到了一個問題,資料庫int欄位超限

錯誤:

我定義的是int(11)然後存的數字是3999990394,發現存不進去,最開始以為是長度不夠,然後給改成了int(16),發現還是報錯。
錯誤提示:

### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column '欄位名' at row 1; 
SQL []; Data truncation: Out of range value for column '欄位名' at row 1; 
nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column '欄位名' at row 1

嘗試

其實以前我就對int(11)中int後邊的11不是很明白,建立表的時候說的是長度,所以就理所當然的被我當做是數字的長度,但是我把長度改大之後還是報錯,所以應該還是我沒理解對。然後我再把int(11)改成bigint(11)可以儲存成功,然後把bigint(11)改為bigint(1)還是可以儲存成功。

原因

其實在資料庫中定義欄位型別的時候,int(x)中的X真沒必要寫出來,因為X不起任何作用。類似,bigint(x)也一樣,寫X與不寫應該都是一個效果,其在資料庫中所能儲存的最大值只是與其自己本身表示的欄位長度有關。但是varchar(x)中的x是有作用的,起到限制字串長度的作用。

總結

類似於int(x)、bigint(x)中的x其實沒必要寫,或者寫了也沒什麼作用,其儲的最大值只是與其自己本身表示的欄位長度有關。所以把int(x)改為bigint(x),就不會再報錯了。

以上總結如有疑問,歡迎探討、如有錯誤,歡迎指出

相關文章