数据库中的枚举值如何存储

首先不推荐使用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 == '男') ,如果需要展示先生、女士的时候此处还需要改动。

这种方式的最大缺点就是当你看到数值的时候,不清楚它表述的含义是什么(即使你是枚举定义者,也很难记住)。

存储字符串男、女
优缺点正好与上面相反。

结论

为了代码的扩展性、可维护性等,牺牲一下可读性吧,推荐大家存储数字。不要抱着侥幸心里以为展示内容不会变。如果真的变动了,你就真的惨了。

posted @ 2021-03-31 10:01  是小毛吖  阅读(2521)  评论(0编辑  收藏  举报
转载请注明出处