? 之前對于mysql并沒有太多的學習,所以對于整形類型后邊的數字沒有太多的理解,這次被一個后輩問到這個問題,自己也不知道如何解釋,所以回頭看了看資料,把該理解的給補上。
一開始以為int(11)是指存儲長度為11位,int(10)就是存儲長度為10位,但是,這是錯的
首先,先解釋一下字節(byte)和位(bit)的關系(在計算表示范圍時會用到二者的關系)
位(bit):英文bit,是計算機晶體管的一種狀態(通電與斷電).就是0與1,真與假,是計算機最基本的傳輸單位
示例:
2bit : 10;
4bit : 1111;
8bit : 1111 1111;
字節(byte):是計算機信息技術用于計量存儲容量的一種計量單位
二者關系:
1B = 8bit
1B = 1111 1111(二進制)
1B = 0至255(十進制)
1B = -128至127(十進制)
mysql的基本數據類型里幾個int如下:
類型 ? ? ? ? ? ? ? ? 大小 ? ? ? ? 范圍(有符號) ? ? ? ? 范圍(無符號) ? ? ? ? 用途
TINYINT ? ? ? ? ? 1字節 ? ? ? ? (-128,127) ? ? ? ? ? ? ? ?(0,255) ? ? ? ? ? ? ? ? ? 小整數值?
SMALLINT ? ? ?2 字節 ? ? ? ?( -2^15 :-32 768,2^15 - 1:32 767) (0,65 535) 大整數值
MEDIUMINT ? 3 字節 ? ? ? ?(-8 388 608,8 388 607) (0,16 777 215) 大整數值
INT ? ? ? ? ? ? ? ? ? 4 字節 ? ? ? ?(-2^31:-2 147 483 648, 2^31 - 1:2 147 483 647) (0,4 294 967 295) 大整數值
BIGINT ? ? ? ? ? ? ?8 字節 ? ? ? ?(-2^63:-9 233 372 036 854 775 808,2^63-1:9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值
這些類型,是定長的,其容量是不會隨著后面的數字而變化的,比如int(11)和int(8),都是一樣的占4字節。tinyint(1)和tinyint(10)也都占用一個字節。所以數據類型括號內的數字不管是多少,所占的存儲空間都固定的
顯然整數類型后邊的數字不是表示的數據長度,而是表示數據在顯示時顯示的最小長度。
當字符長度超過(m)時,相當于啥都沒發生;
當字符長度小于(m)時,就需要指定拿某個字符來填充,比如zerofill(表示用0填充)
所以,沒有zerofill,(m)就是無用的。
綜述:mysql整數類型后邊的數字不是用來限制存儲長度的(因為一個類型的存儲空間是固定的),而是用來限制最小顯示長度的,并且需要跟zerofill搭配使用才會有效果
Happy coding...