Лучше ли иметь метку времени через 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)