我有mysql数据库,生日列为日期。
使用可选年份保存到此列的最佳方法是什么。我应该在其上放一些随机的年份吗?什么是在数据库中保存生日的最佳做法。
我在cakephp,日,月和年创建了3个文本字段..但不知道如何处理这个,保存在数据库中,因为如果我随机放置年份(可能是0001,因为0000不被接受),当我把它拉回来时,它会显示年份。
答案 0 :(得分:1)
最好使用三个列,Day,Month和Year,并将Year视为可选项?
编辑:虽然使用两个可能更干净。一个DATE列,只是在(0000)和一个YEAR列中放入一个虚拟年份。然后在使用它们时组装两个。这样您就可以获得数据类型提供的所有格式,排序和数据验证,但是当您没有它时,您仍然可以忽略这一年
答案 1 :(得分:1)
只是一个观点,但如果年份是可选的(有些人会有;有些人不会)我会使用DATE
类型并将年份设置为零。您可以查看没有年数的生日:
SELECT * FROM myTable WHERE YEAR(birthdate) = 0
或者,如果birthdate
列已编入索引,请使用此列,因为它可以进行优化:
SELECT * FROM myTable WHERE birthdate <= '0000-12-31'
如果所有值都禁止使用年份 - 换句话说,您永远不会存储年份 - 我会建议单独的月份和日期列。
答案 2 :(得分:0)
最好的方法是有两个字段:
birthdate
这是一个日期BirthdayHasYear
这是一个标志(例如tinyint)不依赖于诸如“当年份为零然后未知”之类的规则的原因是数据结构很难理解 - 将来或者如果其他人看到它。然后,我倾向于添加一个约束,表示“如果BirthDayHasYear
为真,则birthdate
上的年份为0(或其他)。
或者,我会有一个birthdate
字段,然后仅通过视图访问该表,其中包含以下字段:
在视图中定义为其他字段。在其他数据库中,我会将此方法用于计算列。