哪种方法可以在MY sql数据库中存储性别?我对这个问题感到有点困惑,因为不同的人以不同的方式表达.有人建议将它存储在INT中更好,但是其他人建议使用TINYINT和Enum,但是其他人建议将它存储在CHAR(1)M for Male和F For Female中.
此外,听到http://en.wikipedia.org/wiki/ISO_5218时更加令人怀疑
但是在我看来将它存储在CHAR中是一个好主意,因为它提供了比ENUM更强大的功能?我也关注可伸缩性,想知道存储数百万条记录的更好解决方案.
非常感谢专家提出的宝贵建议.
最佳答案
就个人而言(因为这是一个有点主观的问题)我会选择ENUM. MysqL不支持CHECK约束,因此ENUM是确保值为M或F(或m或f)的唯一方法.对我来说,这是最重要的一点.
原文链接:https://www.f2er.com/mysql/433673.html此外,ENUM应该只需要一个字节的存储空间(根据docs),因此它与CHAR(1)或TINYINT一样有效存储.
SELECT * FROM myTable WHERE gender = 1;
是男性还是女性?如果是男性,女性是0吗?还是2?或者16岁?你必须记住要编写(和维护)应用程序的一堆东西;无需添加到那堆.
Ed Gibbs的附录2017-12-01:当我在一个不相关的谷歌搜索中偶然发现时重新审视我的答案……
ENUM方法在具有静态,一维值域(例如,Y / N,To / Cc / Bcc)的用例中具有优点,但它对于性别无效.我的答案是在“你如何将专栏限制为M或F”的书呆子语境中,而不是在更广泛的性别定义背景下.
D Mac的解决方案更加强大和开明,但它仍然不完整,因为它也是单维的,而性别是多维的.
在对任何主观类别(性别,种族,阶级认同,宗教,政治派别,就业状况,民族认同,性取向,性行为等)对人进行分类时,请考虑他们可以通过多种方式表明自己.并不总是有“检查单一盒子”的解决方案.
这超越了意识形态.尝试将多维实体分类为单个维度是不准确的,并且不准确性具有成本.