Лучше ли иметь метку времени через MySQL или PHP?

Я начинаю проектировать базу данных и, прежде чем вводить слишком много записей, я хочу подумать о будущем и собрать как можно больше данных. Думаю, было бы хорошо узнать, когда была добавлена ​​запись. Исходя из вашего опыта, лучше сделать это через mySQL через datetime или через php через функцию date. Я буду использовать php для ввода всех значений, так что это будет просто другое поле.

Пока что мне нравится подход php, потому что я могу настроить его так, чтобы он занимал минимальное пространство: гггддччмм и часовой пояс.

Исходя из вашего опыта, как лучше всего хранить эти данные или эти два способа безразличны?

Кроме того, какой часовой пояс вы бы предложили использовать? Часовой пояс, где я нахожусь или GMT? Лучше ли использовать GMT, если, скажем, я перееду позже или если базу данных управляли лица из нескольких часовых поясов.

2 ответа

Сохранить как DATETIME/TIMESTAMP в MySQL он все равно хранится как целое число, просто входит и выходит как отметка времени. Храните данные в UTC.

Вы можете манипулировать отметкой времени в PHP, создав ее с помощью DateTime() и затем перейдя оттуда.

Это также позволяет вам поставить NOT NULL DEFAULT CURRENT_TIMESTAMP на колонке, которая избавляет вас от необходимости активно строить его в php.

Для простоты я предлагаю использовать поле метки времени 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)
Другие вопросы по тегам