データベースに作成日時を記録する場合、
1、PHP側でdate('Y-m-d h:i:s')のように取得したデータをmysqlのdatetime型に記録する
2、mysqlの型をtimestampにする
一般的にはどちらが正しいのでしょうか?
もしくはその時々で使い分けるのでしょうか?
その場合のメリットデメリットなどを教えていただけると大変ありがたいです。よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
実際にINSERTが実行された時点の時間にしておきたいから TIMESTAMP型の列に CURRENT_TIMESTAMP を設定します。
投稿2018/11/26 08:56
総合スコア16419
0
ベストアンサー
一般的にはどちらが正しいのでしょうか?
もしくはその時々で使い分けるのでしょうか?
どのようにしても実現可能な以上は「正しい」という唯一の答えというのは存在しません。
「作成日時」「更新日時」というのを両方持っておきたいのでしたら「作成日時」は初回作成の時以外は更新されてはいけないのでPHPのほうで取得した時間を入れるでしょうし、「更新日時は常に更新されるもの」であればDBをCURRENT_TIMESTAMPにすれば良いですが、
「更新するかどうかを制御したい」という場合はこちらもPHPのほうで取得した時間を入れることになります。
例:ユーザーテーブルにログイン日時を持っているが「これはシステム側で勝手に更新するものだしユーザー自身がユーザー情報を更新した日時じゃないから更新したくない」という”仕様”にした場合、など
つまり**「ケースバイケース」**です。
私の場合は基本的にプログラム側から制御したい方ですが、仕様や設計によりCURRENT_TIMESTAMPを選択することもあります。
投稿2018/11/26 09:02
編集2018/11/26 09:03総合スコア80888
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/26 09:15 編集
2018/11/26 09:28

0
CURRENT_TIMESTAMPにすればいいという意見がありますが、そのサーバーのロケールはおそらくja-jpですよね?
そういう設計者の設計したシステムが、「サマータイム導入」などで、あたふたすることになるんだと思います。
私の設計したシステムでは、サマータイムが導入されても何も問題は起きません。(←外部サイトがサマータイムに対応していないのは別問題)
本筋とは関係のないポエム回答で申し訳ない!
投稿2018/12/04 02:07
総合スコア108
0
一番楽なのは、作成日時のカラムのデフォルト値としてCURRENT_TIMESTAMPにしておけば、
データベース側で自動的に現在日時が設定されるし、
わざわざSQL文上に作成日時に係るカラムを与えなくても済むし。
次は、SQL文に必ず作成日時のカラムにCURRENT_TIMESTAMPを与えるようにすること。
データベース側で自動的に現在日時が設定される。
次は、PHP内でシステムの日時取得してSQL文に詰めること。
実行SQLをログ取得してデバッグに活かすなんてときは、
案外3番目の方法のほうが追いやすくなったりもするので、
「後悔のないように好きなのを選べ」です。
投稿2018/11/26 09:09
編集2018/11/26 09:11
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/26 09:08