詳解mysql int類型的長度值問題

來源:互聯網
上載者:User

標籤:

有一次面試的時候,面試官問我,mysql在建表的時候int類型後的長度代表什麼? 是該列允許儲存值的最大寬度嗎? 為什麼我設定成int(1), 也一樣能存10,100,1000呢.

之前沒有想過這個問題.結果面完回來查了一下.如下,最後得出結論是:只是告訴資料庫說正常長度應該是1,而不是說只能存的長度為1.

當時我雖然知道int(1),這個長度1並不代表允許儲存的寬度,但卻沒有一個合理的解釋. 或者說對這個長度也沒有真正的研究過到底代表什麼, 平時都用int(11), 也不知道為什麼要11位. 所以我在網上查閱了一些資料, 也仔細的看了mysql手冊關於int data type的說法.

以下是每個整數類型的儲存和範圍(來自mysql手冊)

表格一共有四列分別表式:欄位類型, 佔用位元組數, 允許儲存的最小值, 允許儲存的最大值.

類型

位元組

最小值

最大值

 

 

(帶符號的/無符號的)

(帶符號的/無符號的)

TINYINT

1

-128

127

 

 

0

255

SMALLINT

2

-32768

32767

 

 

0

65535

MEDIUMINT

3

-8388608

8388607

 

 

0

16777215

INT

4

-2147483648

2147483647

 

 

0

4294967295

BIGINT

8

-9223372036854775808

9223372036854775807

 

 

0

18446744073709551615

 

我們拿int類型為例:

int類型, 佔用位元組數為4byte, 學過電腦原理的同學應該知道, 位元組(byte)並非是電腦儲存的最小單位, 還有比位元組(byte)更小的單位, 也就是位(bit),一個位就代表一個0或1; 8個位組成一個位元組; 一般位元組用大寫B來表示byte, 位用小寫b來表示bit.

電腦儲存單位的換算:

1B=8b

1KB=1024B

1MB=1024KB

那麼根據int類型允許儲存的位元組數是4個位元組, 我們就能換算出int UNSIGNED(無符號)類型的能儲存的最小值為0, 最大值為4294967295(即4B=32b, 最大值即為32個1組成);

接下來我們再說說我們建表時的欄位長度到底是怎麼一回事.

CREATE TABLE `test` (`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,`number` INT( 5 ) NOT NULL) ENGINE = MYISAM ;

以test表的number欄位為例, 大家看到我建的是int(5)

mysql手冊中這個長度/值用"M"來表示的. 細心的朋友應該有注意到過mysql手冊上有這麼一句話:  M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或類型包含的值的範圍無關;

這句話看上去不太容易理解, 因為這裡有個關鍵詞容易讓我們混淆, "最大顯示寬度"我們第一反應是該欄位的值最大能允許存放的值的寬度. 以為我們建了int(1),就不能存放資料10了, 其實不是這個意思.

這個M=5我們可以簡單的理解成為, 我們建立這個長度是為了告訴MYSQL資料庫我們這個欄位的儲存的資料的寬度為5位元,  當然如果你不是5位元(只要在該類型的儲存範圍之內)MYSQL也能正常儲存,  這也就能解釋以上標紅的話.

我們把這個欄位的"屬性"修改為UNSIGNED ZEROFILL看一下效果.

 我們看到現在我的number欄位, 長度(M)=5, 屬性=UNSIGNED ZEROFILL(無符號,用0來填充位元),  設定這個屬性後我往表時插入資料,系統會自動把number欄位M不夠5位的在左側用0來填充; 效果如下

 手冊上還有這麼一句話"當 mysql 為某些複雜的連接(join)產生暫存資料表時,你可能會遇到問題,因為在這種情況下,mysql 信任地認為所有的值均適合原始的列寬度". 這也讓我不禁感歎這個寬度到底如何設定比較合適?

但有一點看完該文檔你應該清楚的知道, 長度M與你存放的數值型的數的大小無關.

詳解mysql int類型的長度值問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.