1

我开始设计一个数据库,在输入太多记录之前,我想考虑未来并收集尽可能多的数据。我想知道何时添加记录对我有好处。根据您的经验,最好通过 mySQL 通过 datetime 或通过 php 通过 date 函数来执行此操作。我将使用 php 输入所有值,所以它只是另一个字段。

到目前为止,我喜欢 php 方法,因为我可以自定义它以占用最小的空间:yymmddhhmm 和时区。

根据您的经验,存储此数据的最佳方式是什么,或者这两种方式无关紧要?

另外,您建议使用哪个时区?我所在的时区还是格林威治标准时间?如果说我以后要搬家,或者如果来自多个时区的个人管理数据库,最好使用 GMT。

4

2 回答 2

1

将其存储为DATETIME/TIMESTAMP在 MySQL 中,无论如何它都存储为整数,只是作为时间戳输入和输出。以 UTC 格式存储数据。

您可以通过使用 DateTime() 构造它然后从那里开始来操纵 PHP 中的时间戳。

这还允许您NOT NULL DEFAULT CURRENT_TIMESTAMP在列上放置一个,这样您就不必主动在 php.ini 中构建它。

于 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 回答