1

データベースの設計を始めていますが、あまりにも多くのレコードが入力される前に、将来を考えてできるだけ多くのデータを収集したいと考えています。レコードがいつ追加されたかを知ることができればよいと思います。あなたの経験に基づいて、datetimeを介してmySQLを介して、またはdate関数を介してphpを介してこれを行う方が良いですか. php を使用してすべての値を入力するので、単純に別のフィールドになります。

これまでのところ、最小限のスペースを占有するようにカスタマイズできるため、php アプローチが気に入っています: yymmddhhmm & タイムゾーン。

あなたの経験に基づいて、このデータを保存する最善の方法は何ですか?

また、どのタイムゾーンを使用することをお勧めしますか? 現在地のタイムゾーンまたはGMT? 後で移動する場合や、複数のタイムゾーンの個人がデータベースを管理している場合は、GMT を使用するのが最善ですか。

4

2 に答える 2

1

DATETIME/としてTIMESTAMPMySQLに保存します。とにかく整数として保存され、タイムスタンプとして出入りします。データを UTC で保存します。

DateTime() を使用してタイムスタンプを作成し、そこから移動することで、PHP でタイムスタンプを操作できます。

これにより、列に a を配置することもできます。これによりNOT NULL DEFAULT CURRENT_TIMESTAMP、積極的に php でビルドする必要がなくなります。

于 2013-09-19T03:57:25.857 に答える
0

簡単にするために、MySQL のタイムスタンプ フィールドを使用することをお勧めします。データベースはそれが何であるかを理解するため、テキスト バージョンよりもはるかに効率的に (文字列ではなく数値として) 保存され、より多くのことができます。

例えば:

mysql> CREATE TABLE foo (something TEXT NOT NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.11 sec)

mysql> INSERT INTO foo (something) VALUES ("one");
Query OK, 1 row affected (0.07 sec)

mysql> INSERT INTO foo (something) VALUES ("two");
Query OK, 1 row affected (0.13 sec)

mysql> SELECT * FROM foo;
+-----------+---------------------+
| something | created             |
+-----------+---------------------+
| one       | 2013-09-18 22:57:01 |
| two       | 2013-09-18 22:57:03 |
+-----------+---------------------+
2 rows in set (0.00 sec)

mysql> SELECT something, NOW() - created as seconds_since_insert FROM foo;
+-----------+----------------------+
| something | seconds_since_insert |
+-----------+----------------------+
| one       |                  136 |
| two       |                  134 |
+-----------+----------------------+
2 rows in set (0.00 sec)
于 2013-09-19T03:59:15.867 に答える