- ベストアンサー
MySQLのdatetime型に0月0日を格納する方法
- MySQLのdatetime型カラムに不明な日付を格納する方法について考えています。具体的なパターンは、YYYY-MM-DD、YYYY-MM、YYYYの3つです。一般的には不明な日付を0または1で置き換えて格納する方法がありますが、それぞれの方法には利点と欠点があります。MySQL的に問題ない方法を知りたいです。
- 日付が不明なデータをMySQLのdatetime型カラムに格納したいですが、正しい方法を知りたいです。具体的なパターンは、YYYY-MM-DD、YYYY-MM、YYYYの3つです。一般的には不明な日付を0または1で置き換えて格納する方法がありますが、それぞれの方法には利点と欠点があります。
- MySQLのdatetime型カラムに不明な日付を格納する方法について知りたいです。具体的なパターンは、YYYY-MM-DD、YYYY-MM、YYYYの3つです。一般的には不明な日付を0または1で置き換えて格納する方法がありますが、それぞれの方法にはメリットとデメリットがあります。MySQL的に問題ない方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一応、0月0日 は許容されています。 年は4桁指定で 2014-00-00 , 2013-03-00 のようになるべく省略せず指定すべきではありますが。マニュアルみるとinsert時の年月日指定フォーマットは、結構柔軟に対処されます。 where 文で比較するときは、そのような日付は、2014-00-00 であれば2013前年より後で、2014-01-01より前と解釈されます。 http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-types.html 「SQL モード」でも許容されるかが変わるので、ご注意ください
その他の回答 (2)
- mitoneko
- ベストアンサー率58% (469/798)
datetime型では、完全な日付時刻しか扱うことが出来ないです。 残念ですが、案1を実験してみれば、エラーになったと思います。 日付しか扱わないのであれば・・・ 年・月・日の3つのintフィールドを準備して、不明の部分には、nullを入れるくらいしか思いつけないですね。 この場合、日付計算に関わる部分は、PHP側で処理をするしか有りません。 sql側でも日付処理が必要な何かがあるのであれば、年月日フィールドとは別に、datetimeフィールドを持ち、不明の月や日にはデフォルトで1を適用するくらいかなぁ。この場合は、不明な1か明らかな1かは、月・日のフィールドから判定可能です。 このフィールドを持つと、情報が冗長化しますので、年・月・日の各フィールドとdatetimeフィールドの整合性は、php側で保証してあげる必要があります。 文字列で、不明フィールドを0にした日付を持たせるのも一案かと思います。案1の形式で、datetime型を使わずに、char型にしてしまうという手です。 この場合も、日付計算は、PHP側でやらないとしかたがないですね。まともに、sqlで型変換するエラーになってしまいますから。
お礼
回答ありがとうございましたー
- freetaka
- ベストアンサー率53% (106/197)
MySQL + PHP という環境で月日が不明な場合がある というのであれば 日付の取得や計算はPHPのみでやってしまい MySQLのカラムは文字列で設定し 日付を文字列格納するというのも一案としてありだと思います
お礼
回答ありがとうございましたー
お礼
回答ありがとうございましたー