【发布时间】:2012-10-31 08:25:43
【问题描述】:
我已经构建了一个 JavaEE 项目,需要在 MySQL 中存储用户的性别。我想在添加新用户帐户时显示此属性。例如
<select name="gender">
<option value="0">Male</option>
<option value="1">Female</option>
</select>
现在我发现了 2 种方法可以将此属性存储在 MySQL 中。
-
使用整数/字符存储性别列:
gender tinyint(1) not null;在这种情况下,我必须在我的 Java 代码中编写这些:
public class StaticData { public static final short MALE = 0; public static final short FEMALE = 1; }如果是这样,我的数据库将依赖我的 Java 代码来限制值范围并解释 0/1 代表什么(低级别取决于高级别)。我认为这不是一个好主意。
-
使用枚举来存储性别列:
gender enum("MALE", "FEMALE") not null在这种情况下,我的 Java 代码将取决于枚举的值。有两种方法可以获取这些值:
1) public enum Gender { MALE, FEMALE },和方法一的问题几乎一样。
2) 从 MySQL 中检索这些值,例如 "SHOW COLUMNS FROM user LIKE \"gender\"",然后使用正则表达式拆分字符串。但这是一种冗长的方法。每次加载 JSP 时都必须从 db 查询。我觉得会很贵。
这有一个常见的成语吗?如果不是,在为我的项目选择合适的解决方案时我需要考虑哪些因素?
【问题讨论】:
-
我将使用 CHAR(1) 存储 F 或 M。它比 0,1 更具可读性。
-
不要忘记其他选项,例如“其他”、“宁可不说”……
-
还处理其他语言,以及您不知道的情况(未指定)。如果它们不适用,您也可以将其设为 BOOL 并故意让该字段代表 is_female,这样可以解决任何查看数据库或代码的人的大部分编程疑问。
-
@Mr47 怎么会有“其他”性别?