小编典典
useTimezone是较旧的解决方法。MySQL团队最近才重写了setTimestamp /
getTimestamp代码,但是只有在您设置连接参数useLegacyDatetimeCode = false且使用的是最新版本的mysql
JDBC连接器时,才能启用它。因此,例如:
String url =
"jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false
如果下载mysql-connector源代码并查看setTimestamp,很容易看到发生了什么:
如果使用旧日期时间代码=
false,则调用newSetTimestampInternal(…)。然后,如果传递给newSetTimestampInternal的Calendar为NULL,则将日期对象格式化为数据库的时区:
this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US);
this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
timestampString = this.tsdf.format(x);
日历为空非常重要-因此请确保您使用的是:
setTimestamp(int,Timestamp).
…不是setTimestamp(int,Timestamp,Calendar)。
现在应该很清楚这是如何工作的。如果您使用java.util.Calendar在美国/洛杉矶(或您想要的任何