標籤(空格分隔): 高性能MySQL 第四章 schema與數據類型 MySQL位數據類型
以InnoDB爲例說明
InnoDB爲每個BIT列使用一個足夠存儲的最小整數類型來存放,所以不能節省存儲空間。MySQL把BIT當作字符串類型,而不是數字類型。但在數字上下文場景中,會轉換成數字。
例:mysql> CREATE TABLE bittest(a bit(8)); mysql> INSERT INTO bittest VALUES(b'00111001'); mysql> SELECT a, a + 0 FROM bittest;
+------+-------+ | a | a + 0 | +------|-------+ | 9 | 57 | +------+-------+
SET
如果需要存儲很多true/false值,可以考慮合併這些列到一個SET數據類型,它在MySQL內部是以一系列打包的集合來表示的。這樣就有=有效地利用了存儲空間,並且MySQL有像FIND_IN_SET()和FIELD()這樣的函數,方便地在查詢中使用。缺點是改變列的定義需要ALTER TABLE,代價較高。一 般來說,也無法在set列上通過索引查找。在整數列上進行按位操作
一種替代SET的方案是使用一個整數包裝一系列的位,如把8個位包裝到時TINYINT中,並且按照位操作來使用。在代碼裏存取對應關係,缺點是難以理解,如第五個bit設爲true表示什麼?