首先不推薦使用enum類型的字段,原因可以參考:MySQL 枚舉類型的“八宗罪”
提出問題
工作中,我們會經常用到枚舉。例如性別(男、女)、星期(星期一 ~ 星期日)等。我們都會有如下的代碼:
public enum GenderEnum {
MALE(1, "男"),
FEMALE(0, "女"),
;
private final int code;
private final String desc;
public GenderEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
}
並且這個“性別”是需要隨着用戶信息落到DB進行存儲的,那在DB中我們存儲數字0、1,還是存儲字符串男、女呢?
分析問題
存儲數字0、1
感覺這應該是大多數人采取的方式吧。此種方式有如下幾個優點:
1、節省DB空間(雖然現在內存空間已經不care了,但也勉強算一個優點吧)
2、無需關注枚舉對應到前端的展示內容,當展示內容改變時(例如展示為:先生、女士)無需改動。難道你還要刷DB的歷史數據嘛?
3、前端接收數值類型,更方便判斷,並且展示內容改變時也無需改動。假如判斷代碼是 if (gender == '男') ,如果需要展示先生、女士的時候此處還需要改動。
這種方式的最大缺點就是當你看到數值的時候,不清楚它表述的含義是什么(即使你是枚舉定義者,也很難記住)。
存儲字符串男、女
優缺點正好與上面相反。
結論
為了代碼的擴展性、可維護性等,犧牲一下可讀性吧,推薦大家存儲數字。不要抱着僥幸心里以為展示內容不會變。如果真的變動了,你就真的慘了。