MySQL 的 enum 和 set 資料型態應用記錄

為了方便日後查詢,我將我在 PPT 發表 http://goo.gl/ykNk2s 的文章,轉貼過來並進行一些內容的修正。

enum 和 set 兩種資料類型共同特性。

  1. 兩種都是以「字串」方式儲存資料,和其它字串類型的差異在於資料庫會先幫你做檢查。

  2. 兩種最多只能設定 64 組選項。

  3. 設定欄位為 enum('male','female') 時,表示資料只能是 'male''female' 選項的其中之一,相當於 HTML 中的 radio 的概念。

  4. 設定欄位為 set('red','green','blue') 時,資料將是由逗號隔開的字串組合。例如 'red,green''green''blue,red',相當於 HTML 中的 checkbox。

set 的額外特性

  1. 一個是資料寫入前,系統會自動把資料重新排序,像是 'blue,red' 就會重新被調整為 'red,blue' 再儲存。

  2. 如果寫入的資料有重複的部分,會自動移除。像 'red,green,red,blue' 就會被修正為 'red,green,blue'

  3. 如果寫入的資料含有不存在的選項,也會自動移除。像 'red,yellow,blue' 就會被修正為 'red,blue'

  4. 另一個是 set 可接受選項以「2 的{順序}次方」總合碼(sum)來表示選項組合。

    (2的0次方) 2^0 = red => 1,
    (2的1次方) 2^1 = green => 2,
    (2的2次方) 2^2 = blue => 4, … 以此類推

    當我想設定 'red,blue' 時,也可以直接設定數字 5 (1+4)。同理當我設定數字 7 時,表示為 'red,green,blue'。而且這個規則也可以用在 WHERE 條件,像是 WHERE color = 3WHERE color = 'red,green' 會是一樣的。

  5. MySQL 有一個針對 set 的搜尋語法 FIND_IN_SET

目錄

  1. 1. enum 和 set 兩種資料類型共同特性。
  2. 2. set 的額外特性