JDBC SQL时区

时间:2013-12-08 21:17:16

标签: java mysql spring jdbc spring-jdbc

我正在使用Spring with apache commons BasicDataSource。

时区通过以下方式显示为GMT:

SELECT @@global.time_zone, @@session.time_zone;

我的输入是在纪元时间,1386831420000和1386833220000,所以查询应该是这样的:

SELECT * FROM table WHERE AND arrival_time BETWEEN '2013-12-12 06:57:00' AND '2013-12-12 07:27:00';

我启用了SQL profiing,这是实际执行的查询,所以我得不到正确的结果:

SELECT * FROM table WHERE AND arrival_time BETWEEN '2013-12-12 01:57:00' AND '2013-12-12 02:27:00';

请注意,时间是5小时,因为我是EST-5,时间应该是GMT。

我的问题是:如何告诉MySQL或Spring JDBC不使用客户端时区,只是总是使用GMT?

如果我可以添加任何细节来解决问题,请发表评论。

2 个答案:

答案 0 :(得分:0)

尝试使用TO_DATE(或特定于实现的日期转换器函数)将日期字符串显式转换为日期类型

SELECT * 
FROM table 
WHERE arrival_time BETWEEN 
TO_DATE('2013-12-12 06:57:00', 'YYYY-MM-DD HH24:MI:SS')
AND 
TO_DATE('2013-12-12 07:27:00', 'YYYY-MM-DD HH24:MI:SS')

上面的示例是在Oracle SQL中,但是在SQL实现中,将日期字符串显式地转换为日期类型的原则很常见。

答案 1 :(得分:0)

听起来JDBC驱动程序没有正确检测Mysql的时区设置。您可能需要在连接字符串中指定服务器的时区。尝试添加

serverTimezone=UTC&useTimezone=true

到连接字符串。有关更多信息,请参阅http://cs.wellesley.edu/~cs304/jdbc/connector-j.html#connector-j-reference

上的JDBC文档