MySQL位數據類型

標籤(空格分隔): 高性能MySQL 第四章 schema與數據類型 MySQL位數據類型


  以InnoDB爲例說明

  1. 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 |
    +------+-------+
  2. SET
      如果需要存儲很多true/false值,可以考慮合併這些列到一個SET數據類型,它在MySQL內部是以一系列打包的集合來表示的。這樣就有=有效地利用了存儲空間,並且MySQL有像FIND_IN_SET()和FIELD()這樣的函數,方便地在查詢中使用。缺點是改變列的定義需要ALTER TABLE,代價較高。一 般來說,也無法在set列上通過索引查找。

  3. 在整數列上進行按位操作
      一種替代SET的方案是使用一個整數包裝一系列的位,如把8個位包裝到時TINYINT中,並且按照位操作來使用。在代碼裏存取對應關係,缺點是難以理解,如第五個bit設爲true表示什麼?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章