[英]What would be the best way to store birthdate(birthday) field with optional year
我有mysql數據庫,以birthdate列為日期。
什么是保存到此列中的最佳方式(可選年份)。 我應該隨便放些年份嗎? 在數據庫中保存生日的最佳實踐是什么。
我在cakephp,日,月和年中創建了3個文本字段。.但不確定如何將其保存在數據庫中,因為如果我隨機輸入年份(也許是0001,因為不接受0000),則將其拉出回來,它將顯示年份。
最好使用三列,即日,月和年,並將年作為可選項嗎?
編輯:雖然使用兩個可能更清潔。 一個DATE列,然后在(0000)中放置一個虛擬年份,然后在YEAR列中放置一個。 然后在使用它們時組裝兩者。 這樣,您可以獲得數據類型提供的所有格式,排序和數據驗證,但是當您沒有年份時,仍然可以忽略年份
只是一種意見,但是如果年份是可選的(某些年份將具有它;有些則不會),我將使用DATE
類型並將年份設置為零。 您可以像這樣檢查沒有年份的生日:
SELECT * FROM myTable WHERE YEAR(birthdate) = 0
或者,如果將birthdate
列編入索引,請改用它,因為它將被優化:
SELECT * FROM myTable WHERE birthdate <= '0000-12-31'
如果所有值均禁止使用年份(換句話說,您將永遠不會存儲年份),則建議您使用單獨的月份和日期列。
最好的方法是具有兩個字段:
birthdate
是一個日期 BirthdayHasYear
,它是一個標志(例如tinyint) 不依賴諸如“當年為零時,則未知”之類的規則的原因是,數據結構很難理解-將來或是否有人看它。 然后,我傾向於添加一個約束條件,說“如果BirthDayHasYear
為true,則birthdate
為0(或其他任何年份)。
或者,我將有一個birthdate
字段,然后僅通過以下字段訪問該表:
在視圖中定義為其他字段。 在其他數據庫中,我將這種方法用於計算列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.