0

好的,所以以下工作正常

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');

但是如果我只给出一个日期参数,比如:

mysql> SELECT UNIX_TIMESTAMP('2007-11-30');

然后不知何故,我得到了相当于 2007-11-30 18:30 GMT 的时间戳。我可以以某种方式重置它以提供特定日期开始的时间戳吗?像 UNIX_TIMESTAMP('2007-11-30'); 应该给出相当于 UNIX_TIMESTAMP('2007-11-30 00:00:00') 的时间戳;我需要根据某个日期之后发生的事件从表中过滤掉一些记录。谢谢

[编辑]:我不知道如何,但这似乎现在按预期工作。截图: 2007-11:30 00:00:00 2007-11:30 18:30:00 2007-11:30

4

3 回答 3

0

找到了一种方法来确保 UNIX_TIMESTAMP 函数返回正确的时间戳,而不管任何干扰时区等

>> SELECT UNIX_TIMESTAMP(CONCAT(t.DATE,' 00:00:00')) FROM db.table_name t

也就是说,在查询字符串中手动附加 00:00:00。

于 2012-08-06T07:52:57.210 回答
0

我已经检查过了,但我得到了相同的时间戳 '2007-11-30 00:00:00' 和 '2007-11-30'

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 00:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2007-11-30 00:00:00') |
+---------------------------------------+
|                            1196361000 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2007-11-30');
+------------------------------+
| UNIX_TIMESTAMP('2007-11-30') |
+------------------------------+
|                   1196361000 |
+------------------------------+

你能在你的机器上运行这些查询并检查时间戳值吗?

于 2012-08-01T12:30:05.717 回答
0

我还检查了,对我来说也是 00:00:00。在进一步调查中,我遇到了这个Here

服务器将日期解释为当前时区的值,并将其转换为 UTC 的内部值。客户端可以设置他们的时区,如第 10.6 节,“MySQL 服务器时区支持”中所述。

在进一步搜索中,很明显有一个变量system_time_zone,它是在服务器开始使用服务器机器的时区时设置的。也见这里

对于每个连接的客户端,他们可以将自己的时区设置为

mysql> SET time_zone = timezone;

所以最后,您需要检查您的system_time_zone,将其设置为适当的值。

我希望它会运作良好......

于 2012-08-01T12:42:40.963 回答