就个人而言(因为这是一个有点主观的问题)我会选择ENUM
. MySQL 不支持CHECK
约束,因此这ENUM
是真正确保值为M
or F
(or m
or f
) 的唯一方法。对我来说,这是最重要的一点。
此外,ENUM
应该只需要一个字节的存储空间(根据文档),所以它在存储方面与CHAR(1)
or一样有效TINYINT
。
我根本不理解这种TINYINT
方法,因为您最终会遇到这样的查询:
SELECT * FROM myTable WHERE gender = 1;
是1
男的还是女的?如果是男性,是女性0
吗?或者是2
吗?或者也许16
?你已经必须记住一堆东西来编写(和维护)一个应用程序;无需添加到那堆。
Ed Gibbs 的附录 2017-12-01:当我在不相关的 Google 搜索中偶然发现它时,重新审视我的答案......
该ENUM
方法在具有静态、一维值域(例如,Y/N、To/Cc/Bcc)的用例中具有优点,但它不适用于性别。我的回答是在“你如何将一列限制为 M 或 F”的书呆子语境中,而不是在更广泛的性别定义语境中。
D Mac 的解决方案更加健壮和开明,但它仍然不完整,因为它也是单维的,而性别是多维的。
在将人类分类为任何主观类别(性别、种族、阶级认同、宗教、政治派别、就业状况、种族认同、性偏好、爱恋等)时,请考虑他们可能识别自己的多种方式。并不总是有“选中一个框”的解决方案。
这超越了意识形态。试图将多维实体归类为单一维度是不准确的,而且不准确是有代价的。