java - 在将 Java 日期写入 SQL TIMESTAMP 列之前,JDBC 是否会将日期从 JVM 时区转换为数据库 session 时区?

标签 java sql jdbc timezone timestamp

在编写 Java 之前 Date到 SQL TIMESTAMP列,是否 JDBC将 Java 虚拟机时区的日期转换为数据库 session 的日期?

例如,假设 Java 虚拟机时区是 UTC并且数据库 session 时区是 UTC-5 .如果 Java 程序试图存储 2000-01-01 00:00:00通过将其传递给 PreparedStatement#setTimestamp(int, Timestamp) ,根据 JDBC 标准,数据库是否存储 TIMESTAMP '2000-01-01 00:00:00'TIMESTAMP '1999-12-31 19:00:00' ?

最佳答案

不,JDBC只是关于客户端如何访问数据库的 API。对于时间戳存储,这必须取决于编写符合 JDBC API 标准的数据库驱动程序的组织。

Here's MySQL 的 PreparedStatement 实现的实现。他们似乎将 Java 的 JVM 时区带到了 MySQL 时区(检查 setTimestampInternal() 方法)。

关于java - 在将 Java 日期写入 SQL TIMESTAMP 列之前,JDBC 是否会将日期从 JVM 时区转换为数据库 session 时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4123534/

相关文章:

Java Server Application - Facebook 自动登录和交互

sql - 仅获取 Y 列中最靠近 X 列的行

java - 内存有限的数据库连接对象行为

java - JDBC SQLite 更新

java - 调试时强制异常

java - ServletRequest 和 ServletContext 接口(interface)中 getRequestDispatcher() 中的单个方法

PHP MySQL 复杂连接

sql - 有趣的 SQL 排序问题

java - 尝试记录 sql 请求时 P6Spy 出现 ClassNotFoundException

java - 在 JFileChooser 中放置一个 'ok' 或 'open' 按钮