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 = 3 和 WHERE color = 'red,green' 會是一樣的。

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

目錄

Go Top