在一台服务器上,当我运行时:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
在另一台服务器上
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud) 跟进https://serverfault.com/questions/191331/should-servers-have-their-timezone-set-to-gmt-utc的问题
MySQL时区应该设置为UTC还是应该设置为与服务器或PHP设置相同的时区?(如果不是UTC)
优缺点都有什么?
我正在使用MySql Database.Iy中的一个查询中的Where Condition.我的问题是我的表中有一个displaytime列,但该表列显示UTC时间中的数据.我想在本地时间转换该displaytime列Zone.so如何从查询本身提供此工具.
我已经对这些东西进行了调整,并且我知道那样的东西SELECT CONVERT_TZ()会起作用.但它不适合我.
这是我的查询,我需要将显示时间转换为本地时区...所以有人可以指导我吗?
WHERE displaytime >= '2012-12-01 00:00:00'
AND displaytime <='2013-02-22 23:59:59'
AND ct.organizationId IN (
SELECT t.organizationId
FROM organization_ AS t
JOIN organization_ AS p ON t.treePath LIKE CONCAT(p.treePath, '%')
WHERE p.organizationId = 10707
Run Code Online (Sandbox Code Playgroud)
样本数据

我一直在我的应用程序中使用PHP strtotime和MySQL的UNIX_TIMESTAMP函数,将日期转换为时间戳.PHP和MySQL在我的本地机器上运行,这些函数通常返回相同的结果,正如我所期望的那样:
$ php
<?php echo strtotime("2011-06-02"); ?>
1307001600
mysql> SELECT UNIX_TIMESTAMP("2011-06-02") ts;
+------------+
| ts |
+------------+
| 1307001600 |
+------------+
Run Code Online (Sandbox Code Playgroud)
但是,偶然地,我碰巧注意到当我1983-01-01作为日期输入时,结果不再相等:
$ php
<?php echo strtotime("1983-01-01"); ?>
410263200
mysql> SELECT UNIX_TIMESTAMP("1983-01-01") ts;
+-----------+
| ts |
+-----------+
| 410256000 |
+-----------+
Run Code Online (Sandbox Code Playgroud)
如您所见,PHP返回410263200,而MySQL返回410256000 - 相差7200秒.
这让我很好奇,我想知道时间戳不再等同于什么日期,所以我写了一个以今天的日期(Ymd格式)开头的小程序,使用PHP strtotime和MySQL UNIX_TIMESTAMP并比较结果.然后它从每个值中减去1天并循环直到它们不再相等.
结果:
1983年10月29日
1983年10月29日,出于某种原因,strtotime并UNIX_TIMESTAMP返回值,通过7200秒不同.
有任何想法吗?
谢谢阅读.
我通过JDBC使用MySQL更新一行时遇到以下异常:
com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:'2006-10-01 02:22:44'
该列定义为:
'
created_on_servicetimestamp NULL DEFAULT NULL'
该列上没有索引或外键.
显然,这不是数据类型的问题.我在该日期时间之前和之后都有该表中的值.我也有在上午2:22之前和之后的时间值.
哪一个最好用,DateTime或INT(Unix时间戳)或其他任何东西来存储时间值?
我认为INT在性能方面会更好,也更普遍,因为它可以很容易地转换为许多时区.(我来自世界各地的网络访问者可以看到没有混淆的时间)
但是,我仍然怀疑它.有什么建议?