2011-10-17 2 views
0

MySQL/PHPにユーザのBIRTHDATESを格納する最良の方法は何ですか?MySQL/PHPでユーザのBIRTHDATESを保存する最も良い方法は何ですか?

私は現在、次の形式でVARCHAR(10)としてそれを保存しています:

MM-DD-YYYY 

...しかし、私は時々、その中に無効な年を参照、特に以来、これが最善の方法ではない気がしますフィールド。

最高の方法が何であるかだけではなく、私のサイトで誕生日が処理される方法全体を変更するように確信できるようにする理由も説明してください。 。

ありがとうございました。

答えて

8

MySQLは日付のネイティブフィールドの型を持っている:DATE.

ちょうど私が全体の方法を変更するために確信させたことができるように、それが最善の方法だ理由を説明も、最善の方法とは何かを言わないでください誕生日は私のサイトで扱われますが、これは必要とされるべき大きな仕事です。

さらに詳しい説明はありません:)日付をmySQLテーブルに保存する場合は、DATEが正しい選択です。 ><BETWEENなどのクエリ用の最適化されたインデックス作成機能があり、早く並べ替えることができ、1001-9999年の任意の日付を処理できるため、これは実際に行く方法です。

2

フィールドを含むストレージと操作(日付によるフィルタリングなど)の両方にとって非常に効率的であるため、DATEタイプとして格納します。

0

他の人は既に答えました:MySQLには日付のみのDATE形式がありますが、時間と日付が必要な場合はDATETIMEとTIMESTAMPもあります。

DATEストレージの3バイトを必要とし、DATETIME 8つのバイトを必要とし、TIMESTAMPはINTも4つのバイトを必要とする。なお、4

を必要とします。あなたの誕生日のような対応する時間のないDATEを使っているのであれば、それは本当に問題ではありませんが、an articleにはDATETIMEの使用を避ける理由がいくつか議論されています。読む。記事の中の提案は必ずしも実用的ではないことに注意している人もいるので、コメントを読む価値がある。クエリオプティマイザは、時には日付関数に問題があり、日付をUnixタイムスタンプとして保存するのが困難です。

0

これは前にErr変数をnullに宣言していますか?

<?php 
    if (! isset ($_POST ['yearOfBirth']) || empty ($_POST ['yearOfBirth'])) { 
     $isFormValid = FALSE; 
     $yearErr = "Please select year"; 

     if (! isset ($_POST ['monthOfBirth']) || empty ($_POST ['monthOfBirth'])) { 
      $isFormValid = FALSE; 
      $monthErr = "Please select month"; 

      if (! isset ($_POST ['dayOfBirth']) || empty ($_POST ['dayOfBirth'])) { 
       $isFormValid = FALSE; 
       $dateErr = "Please complete the dob"; 

       $dob = $_POST ['yearOfBirth'] . "-" . $_POST ['monthOfBirth'] . "-" . $_POST ['dayOfBirth']; 
//    exit(print_r($_POST)); 
      } 
     } 
    } 
--------------------------- 
Here is the SQL part. 
---------------------------------- 
$dob = $_POST["yearOfBirth"] . "-" . $_POST["monthOfBirth"] . "-" . $_POST["dayOfBirth"]; 

$register = "INSERT INTO tablename(dob,) 
    VALUES('$dob',)"; 

これは

を役に立てば幸い
関連する問題