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

2021-09-02 21:10:46 字數 1482 閱讀 4202

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

型別

位元組

最小值

最大值

(

帶符號的/無符號的)

(

帶符號的/無符號的)

tinyint 1

-128

127

0255

smallint 2

-32768

32767

065535

mediumint 3

-8388608

8388607

016777215

int 4

-2147483648

2147483647

04294967295

bigint 8

-9223372036854775808

9223372036854775807

018446744073709551615

**一共有四列分別表式:字段型別, 占用位元組數, 允許儲存的最小值, 允許儲存的最大值.

我們拿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組成);

mysql型別關鍵字後面的括號內指定整數值的顯示寬度(例如,int(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。顯示寬度並不限制可以在列內儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。

當結合可選擴充套件屬性zerofill使用時, 預設補充的空格用零代替。例如,對於宣告為int(5) zerofill的列,值4檢索為00004。請注意如果在整數列儲存超過顯示寬度的乙個值,當mysql為複雜聯接生成臨時表時會遇到問題,因為在這些情況下mysql相信資料適合原列寬度。

所有整數型別可以有乙個可選(非標準)屬性unsigned。當你想要在列內只允許非負數和該列需要較大的上限數值範圍時可以使用無符號值。

所以int(10)與int(11)後的括號中的字元表示顯示寬度,整數列的顯示寬度與mysql需要用多少個字元來顯示該列數值,與該整數需要的儲存空間的大小都沒有關係,int型別的字段能儲存的資料上限還是2147483647(有符號型)和4294967295(無符號型)。

詳解mysql int型別的長度值

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

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

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

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

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