数据库中的枚举值如何存储
首先不推荐使用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 == '男') ,如果需要展示先生、女士的时候此处还需要改动。
这种方式的最大缺点就是当你看到数值的时候,不清楚它表述的含义是什么(即使你是枚举定义者,也很难记住)。
存储字符串男、女
优缺点正好与上面相反。
结论
为了代码的扩展性、可维护性等,牺牲一下可读性吧,推荐大家存储数字。不要抱着侥幸心里以为展示内容不会变。如果真的变动了,你就真的惨了。