首頁  >  文章  >  資料庫  >  詳解 MySQL int 類型的長度值問題

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

藏色散人
藏色散人轉載
2019-09-19 10:01:353447瀏覽

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

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

推薦:《mysql教程

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

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

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

我們拿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 int 類型的長度值問題

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

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

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

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

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

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

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

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

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

以上是詳解 MySQL int 類型的長度值問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除