質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

3570閲覧

データベースに作成日時を記録する場合はPHP側、MYSQL側どちらで日付を取得するのか

bws

総合スコア98

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

4クリップ

投稿2018/11/26 08:51

データベースに作成日時を記録する場合、

1、PHP側でdate('Y-m-d h:i:s')のように取得したデータをmysqlのdatetime型に記録する
2、mysqlの型をtimestampにする

一般的にはどちらが正しいのでしょうか?
もしくはその時々で使い分けるのでしょうか?
その場合のメリットデメリットなどを教えていただけると大変ありがたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

実際にINSERTが実行された時点の時間にしておきたいから TIMESTAMP型の列に CURRENT_TIMESTAMP を設定します。

投稿2018/11/26 08:56

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bws

2018/11/26 09:08

INSERTする時とあらかじめPHPで生成した時と時間が違うというのが頭にありませんでした。とても勉強になります、ありがとうございます。
guest

0

ベストアンサー

一般的にはどちらが正しいのでしょうか?

もしくはその時々で使い分けるのでしょうか?

どのようにしても実現可能な以上は「正しい」という唯一の答えというのは存在しません。
「作成日時」「更新日時」というのを両方持っておきたいのでしたら「作成日時」は初回作成の時以外は更新されてはいけないのでPHPのほうで取得した時間を入れるでしょうし、「更新日時は常に更新されるもの」であればDBをCURRENT_TIMESTAMPにすれば良いですが、
「更新するかどうかを制御したい」という場合はこちらもPHPのほうで取得した時間を入れることになります。
例:ユーザーテーブルにログイン日時を持っているが「これはシステム側で勝手に更新するものだしユーザー自身がユーザー情報を更新した日時じゃないから更新したくない」という”仕様”にした場合、など

つまり**「ケースバイケース」**です。
私の場合は基本的にプログラム側から制御したい方ですが、仕様や設計によりCURRENT_TIMESTAMPを選択することもあります。

投稿2018/11/26 09:02

編集2018/11/26 09:03
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bws

2018/11/26 09:06

仕様や設計にあわせて選択すればいいのですね。 とてもスッキリしました、ありがとうございます。
sazi

2018/11/26 09:15 編集

合わせられるなら、DB側にしおておいた方が、データ補正や抽出などで、PHP側との時間のズレを考慮しなくて済む分楽ではあります。 TNSで別サーバでも同期するならどっちでも構わないと思いますけどね。
bws

2018/11/26 09:21

現時点ではDB側に統一できそうなのでそのように進めようと思えました。 大変貴重なアドバイスありがとうございます。
sazi

2018/11/26 09:28

ケースバーケースについてはmst10806さんが回答されている通りです。 例えば、バッチ的に複数のデータを扱うようなケースで日を跨ぐような処理になった場合に、開始の日に揃えたいような場合は、current_date()は使用できません。
m.ts10806

2018/11/26 09:30

補足ありがとうございます。
guest

0

PHP 側で取得した時刻を DB に渡す方が、時刻をモックできるようにできるので、テストは書きやすいですよ。

投稿2018/12/04 04:29

yuuAn

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bws

2018/12/05 02:45

どちらもメリット、デメリットがありますね。場合によって使い分けられるように意識したいと思います!
guest

0

CURRENT_TIMESTAMPにすればいいという意見がありますが、そのサーバーのロケールはおそらくja-jpですよね?
そういう設計者の設計したシステムが、「サマータイム導入」などで、あたふたすることになるんだと思います。
私の設計したシステムでは、サマータイムが導入されても何も問題は起きません。(←外部サイトがサマータイムに対応していないのは別問題)
本筋とは関係のないポエム回答で申し訳ない!

投稿2018/12/04 02:07

TomoakiNagahara

総合スコア108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bws

2018/12/05 02:41

サーバー側の設定に左右されてしまうというのは結構なデメリットですね。貴重な回答ありがとうございます!
guest

0

一番楽なのは、作成日時のカラムのデフォルト値としてCURRENT_TIMESTAMPにしておけば、
データベース側で自動的に現在日時が設定されるし、
わざわざSQL文上に作成日時に係るカラムを与えなくても済むし。

次は、SQL文に必ず作成日時のカラムにCURRENT_TIMESTAMPを与えるようにすること。
データベース側で自動的に現在日時が設定される。

次は、PHP内でシステムの日時取得してSQL文に詰めること。

実行SQLをログ取得してデバッグに活かすなんてときは、
案外3番目の方法のほうが追いやすくなったりもするので、
「後悔のないように好きなのを選べ」です。

投稿2018/11/26 09:09

編集2018/11/26 09:11
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bws

2018/11/26 09:19

ありがとうございます。 毎回SQL文でCURRENT_TIMESTAMPするというパターンをしりませんでした。 後悔のない選択ができるように精進したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問