mysql中有5個整數型別,他們的取值範圍和占用儲存空間很容易通過搜尋引擎得出結果,如圖:
比如tinyint占用1位元組的空間,其有符號的取值範圍是-128到128,無符號的範圍是0到255。
1.取值範圍怎麼來的
最開始的時候我是看不懂這個**的,為什麼1個位元組他的取值範圍就是-128到128呢?經過查閱資料,因為計算機儲存中的資料是由二進位制的0和1組成的,每個0或者1都代表乙個位(bit),1個位元組(b)等於8位。無符號時:最小值8位全是0,最大值8位全是1,轉為對應十進位制,就是0到255。有符號時:二進位製用最左邊的一位來表示正負,0為正,1為負,所以01111111就是127,而用補碼的方式表示負數,即11111111就是-127,其中的-0被認為規定為-128,所以他的範圍是圖中的樣子。其餘的型別,對應的位元組數乘8位,也可以計算出對應範圍。
2.根據需求選擇合適的型別
有時候,開發同學設計的表中,數值型別全部使用int,這會造成資源的浪費。如使用者的性別,年齡,狀態等字段,性別只有男女之分,年齡一般在0到100之間,狀態的標識也不會超過幾十上百,所以使用tinyint最為合適。
如果儲存的資料中沒有負數,則使用unsigned無符號型別。
有時候需要儲存ipv4位址,可以使用int unsigned型別,儲存時使用mysql函式inet_aton()把ip轉為數字,使用時用inet_aton()把數字轉為ip。
3.關於tinyint(2)
括號中的2表示的不是tinyint的最大長度,而是顯示的最大長度。tinyint的最大值還是127沒變(有符號),雖然已經超過2位了。這個2的作用需要在建表時指定zerofill引數後,查詢時才能體現出來。如果表中資料是1,則查出來的結果會自動用0補成兩位,即01。這只是影響的查詢結果,表中的資料還是1沒變。所以平時指定括號中的數值並沒有意義。
型別取值範圍
ieee754浮點數的表示方法。c語言裡對float型別資料的表示範圍為 3.4 10 38 3.4 10 38。double為 1.7 10 308 1.7 10 308,long double為 1.2 10 4932 1.2 10 4932.型別位元 位 數 有效數字 數值範圍 float 6...
整數的取值範圍
在大學裡面學習計算機組成原理的時候,經常搞不懂一些數的取值範圍到底是怎麼得來的,比如有的整數的取值範圍是 32768 32767,為什麼負數和正數不對稱呢?到現在自己還是很迷糊,故查閱了一些資料,現在說明一下 整型的寬度是乙個字 編譯器不同,整數的取值範圍也不同,有的編譯器整數是4個位元組 也就是2...
char(int )型別取值範圍
先拋問題,為什麼char的取值範圍是 128 127或0 255呢?再做解答 概念悉知 char型別佔乙個位元組,乙個位元組8個位元位。計算機中儲存數字儲存的是補碼,正數的原返補相同 1.當char是無符號的時 8個位元位分布為 0000 0000 為最小值0,而當8個位元位分布為 1111 111...