mysql中int型別的寬度M解析

2021-07-22 14:45:01 字數 878 閱讀 7320

一直以來在mysql建表的時候都有乙個困惑,那就是關於int型別。int(m)這個m代表什麼?

比如我定義乙個文章的主鍵news_id為int(8)為什麼要定義為8?如果我儲存乙個位數為10的數3445667788,發現實際也是可以儲存的。於是檢視mysql的手冊,發現有這樣一段話:

m指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或型別包含的值的範圍無關。

顯示寬度,我們可以理解為所儲存數值的位數。比如我設定news_id為int(8),是告訴mysql我要儲存的數值的最大位數是個8位數,但是如果儲存的超過8位數,只要在int型別允許的範圍內(signed型別-2147483648~2147483647,unsigned型別0~4294967295

)也是可以儲存的。比如:

從上面兩個圖可以看出,我儲存了乙個超過8位數的int型別資料,還是能夠正常顯示的。那麼問題又來了,這個m既然只要我能保證在所屬範圍之內,我是不是可以隨意去定義了,當然不是的。首先設定m肯定要跟實際的業務資料相關,多設定浪費儲存空間。另外如果你設定了填充0,zerofill的話就可以看出一些端倪:

我們把news_id的寬度設定為3,然後再檢視下看看:

我們看到值為1的左端填充了0,原來預設為0的變成了000.所以如果m設定為某個值,並且設定了zerofill的話,當儲存的長度小於m的話,會自動填充0.所以有時專案裡確實需要儲存類似於001,002...的值時,這個m的設定要符合業務需求。對於tinyint,mediumint,bigint等一樣的理解。

相比較來說,char(n)和varchar(n)型別的這個n代表實際的儲存長度,超過了會被mysql截掉。還是有所區別的。

MySQL中Int型別的長度值問題

mysql在建表的時候int型別後的長度代表什麼?是該列允許儲存值的最大寬度嗎?為什麼我設定成int 1 也一樣能存10,100,1000呢.當時我雖然知道int 1 這個長度1並不代表允許儲存的寬度,但卻沒有乙個合理的解釋.或者說對這個長度也沒有真正的研究過到底代表什麼,平時都用int 11 也不...

mysql 中欄位型別與寬度的選擇

mysql 中 varchar 和varchar 的區別 字段型別與合理的選擇字段型別 注意 int欄位設定寬度也可以設定到int最大容量 之前一直對於mysql的字段型別選擇存在疑惑,int 與 tinyint int 1 與 tinyint 1 varchar 與 char varchar 10...

mysql中int型別單引號問題

今天寫mysql的時候發現了乙個問題,在查詢的時候不小心把int型別的id加上引號查詢了,但是也能查詢出來,select from account where aid 1 於是查詢了很多資料,最後得出的結論是,mysql會自動轉換 當你型別為int 但傳入的值為varchar 他會把前幾個 數字挑出...