通过mySQL或php设置时间戳更好吗?
我开始设计一个数据库,在输入太多记录之前,我想考虑未来,收集尽可能多的数据。我想我最好知道这张唱片是什么时候加的。根据您的经验,通过mySQL通过datetime还是通过php通过date函数来实现这一点更好。我将使用php来输入所有的值,因此它只是另一个字段 到目前为止,我喜欢php方法,因为我可以自定义它以占用最少的空间:yymmddhhmm&timezone 根据您的经验,存储这些数据的最佳方式是什么,或者这两种方式是不同的通过mySQL或php设置时间戳更好吗?,php,mysql,timestamp-with-timezone,Php,Mysql,Timestamp With Timezone,我开始设计一个数据库,在输入太多记录之前,我想考虑未来,收集尽可能多的数据。我想我最好知道这张唱片是什么时候加的。根据您的经验,通过mySQL通过datetime还是通过php通过date函数来实现这一点更好。我将使用php来输入所有的值,因此它只是另一个字段 到目前为止,我喜欢php方法,因为我可以自定义它以占用最少的空间:yymmddhhmm&timezone 根据您的经验,存储这些数据的最佳方式是什么,或者这两种方式是不同的 另外,您建议使用哪个时区?我所在的时区还是格林尼治标准时间?如果
另外,您建议使用哪个时区?我所在的时区还是格林尼治标准时间?如果说我以后要搬家,或者如果来自多个时区的个人管理数据库,最好使用GMT。将其存储为
DATETIME
/TIMESTAMP
在MySQL中,它存储为整数,只是作为时间戳输入和输出。以UTC格式存储数据
您可以在PHP中操作时间戳,方法是使用DateTime()构造时间戳,然后从那里开始
这还允许您在列上放置一个
非空默认的当前时间戳
,这样您就不用在php中主动构建它了。将它存储为日期时间
/时间戳
在MySQL中,它存储为一个整数,只是作为时间戳输入和输出。以UTC格式存储数据
您可以在PHP中操作时间戳,方法是使用DateTime()构造时间戳,然后从那里开始
这还允许您在列上放置一个
非空默认当前时间戳
,这样您就不用在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)
为了简单起见,我建议使用MySQL的timestamp字段。因为数据库可以理解它是什么,所以它的存储效率比文本版本(作为一个数字,而不是一个字符串)要高很多,而且您可以用它做更多的事情 例如:
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)