簡體   English   中英

什么是最好的方式來存儲生日(生日)字段與可選的年份

[英]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'

如果所有值均禁止使用年份(換句話說,您將永遠不會存儲年份),則建議您使用單獨的月份和日期列。

最好的方法是具有兩個字段:

  1. birthdate是一個日期
  2. BirthdayHasYear ,它是一個標志(例如tinyint)

不依賴諸如“當年為零時,則未知”之類的規則的原因是,數據結構很難理解-將來或是否有人看它。 然后,我傾向於添加一個約束條件,說“如果BirthDayHasYear為true,則birthdate為0(或其他任何年份)。

或者,我將有一個birthdate字段,然后通過以下字段訪問該表:

  • BirthdayHasYear
  • 年齡

在視圖中定義為其他字段。 在其他數據庫中,我將這種方法用於計算列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM