數據庫中的枚舉值如何存儲


首先不推薦使用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 == '男') ,如果需要展示先生、女士的時候此處還需要改動。

這種方式的最大缺點就是當你看到數值的時候,不清楚它表述的含義是什么(即使你是枚舉定義者,也很難記住)。

存儲字符串男、女
優缺點正好與上面相反。

結論

為了代碼的擴展性、可維護性等,犧牲一下可讀性吧,推薦大家存儲數字。不要抱着僥幸心里以為展示內容不會變。如果真的變動了,你就真的慘了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM