最近接手新專案,看到資料庫很多int欄位設定了各種各樣的長度,估計是小夥伴搞錯了int長度的意義,誤以為int後面的數字代表的是允許儲存的最大長度, 比如, 誤以為 int(1) 不能儲存 10.
其實在mysql裡,int的長度並不會限制儲存的數字範圍. 比如, int 和 int(3) 的儲存範圍都是 -2147483648 ~ 2147483647, int unsigned 和 int(3) unsigned 的儲存範圍都是0 ~ 4294967295.
咱們先看一下mysql官方文件裡的描述
mysql還支援選擇在該型別關鍵字後面的括號內指定整數值的顯示寬度(例如,int(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。顯示寬度並不限制可以在列內儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。
這句話的意思是說,int後面的數字描述的的實際上可以理解為」顯示長度」, 如果該欄位開啟 「zerofill/補零」就能很明顯地知道它的作用.
下面來做兩個測試
1.測試int(3)是否能儲存10000這個數字
create
table test (
with_length int(3) zerofill,
without_length int
) engine=innodb, charset=utf8
//插入資料
insert
into test values (10000,10000);
select * from test;
with_length without_length
10000 10000
資料成功插入,證明了這個數字跟儲存長度沒有任何關係
2.with_length啟用了zerofill 我們插入1試一下
insert
into test values (1,1);
select * from test;
with_length without_length
001 1
可以看到,啟用了零填充的字段,1顯示為001,填充了兩個0湊夠3位顯示長度
這就是int後面數字的意義了
mysql中int長度的意義
mysql的字段,unsigned int 3 和unsinged int 6 能儲存的數值範圍是否相同。如果不同,分別是多大?不同,int 3 最多顯示3位無符號整體,int 6 最多顯示6位無符號數。如果你的答案和上面的一致,恭喜你和我犯了一樣的錯誤。我們建立下面這張表 create table...
mysql中int長度的意義
疑問 mysql的字段,unsigned int 4 和unsinged int 5 能儲存的數值範圍是否相同。如果不同,分別是多大?答 無論是int 4 int 5 儲存的都是4位元組無符號整數,也就是0 2 32。但是,當數字不足4位或5位時,前面會用0補齊。mysql支援選擇在該型別關鍵字後面...
MySQL中Int型別的長度值問題
mysql在建表的時候int型別後的長度代表什麼?是該列允許儲存值的最大寬度嗎?為什麼我設定成int 1 也一樣能存10,100,1000呢.當時我雖然知道int 1 這個長度1並不代表允許儲存的寬度,但卻沒有乙個合理的解釋.或者說對這個長度也沒有真正的研究過到底代表什麼,平時都用int 11 也不...