-
1 # 網際網路上的追跡者
-
2 # 老四觀世界
首先來回顧關於 bit 的 tinyint 的知識。bit(M):代表位欄位型別。其中 M 表示每個值的位數,範圍是從 1 到 64,預設為 1。
tinyint:屬於數字型別,用來儲存小範圍數字,有正負的概念。基本的使用場景就是小字典或者列舉型別。
我們都知道,在 MySQL 中,合適的字元儲存長度,不僅帶來的是資料空間的節省,也會解約索引的儲存,更重要的是會加速內容的檢索。另外,對於 tinyint,推薦儘量使用無符號正數,可以擴大表示範圍。比如說我們表示人的年齡,就可以設計為 tinyint,因為 tinyint unsigned 值的範圍表示的是 0 ~ 255。
另外對於布林型別的欄位,別的不清楚,在 Java 中最好還是使用 unsigned tinyint 來表示,1 代表 true,0 代表false。列舉型別在一定範圍也推薦 unsigned tinyint。因為 bit 雖然在一定業務場景下可以替代 tinyint 進一步節省空間,但是 bit 設計相對來講是針對二進位制的,不屬於數值型別,而我們的業務場景一般都是拿數值型別進行運算、分支判斷等等,所以是偏向於非二進位制型別的。
-
3 # 寫程式設計師的程式碼
bit和tinyint型別肯定用的多。
從數字型別概述:
1、BIT [(M)]
位欄位型別。M表示每個值的位數,從1到64.如果省略M,則預設值為1。
此資料型別已新增到MyISAM的MySQL 5.0.3中,並已在5.0.5中擴充套件到MEMORY,InnoDB,BDB和NDBCLUSTER。在5.0.3之前,BIT是TINYINT(1)的同義詞。
是數字型別,儲存小數, 一般對應編輯語言裡的小字典或列舉型別. 節省空間的同時, 避免存入超範圍的值
2、TINYINT [(M)] [UNSIGNED] [ZEROFILL]
一個非常小的整數。有符號範圍是-128到127.無符號範圍是0到255。
多用於儲存狀態. 如bit(1) 直接對應Java語言的布林型別true和false. 用做狀態儲存時一個欄位可以儲存多至64個狀態。
另外考慮這一點:
1、BOOL,BOOLEAN
這些型別是TINYINT(1)的同義詞。零值被認為是錯誤的。非零值被認為是真實的。
綜上所述,在我的專案中我一般用bit(1)存布林型,因為它只佔一個位元組,當然也可以用int,但是會造成資源浪費。
列舉類推薦用tinyint,當然也可以用enum ,但是移植性不太好。
大家在用MySQL的時候,bit和tinyint型別用的多嗎?很少用還是從來不用。對於布林型別的欄位用什麼型別儲存,只有幾個選項的數字型列舉值用什麼型別儲存?
回覆列表
當然用的多,比如使用的一些標記欄位,狀態屬性都可以選擇位元組佔用小的這些型別,節省儲存空間,加速查詢,這個原因可以追溯到mysql如何儲存資料,以及大資料量mysql的一些最佳化。如果想深入瞭解的話,可以看看《MySQL技術內幕:InnoDB儲存引擎》