提问人:mattsmith5 提问时间:11/10/2023 最后编辑:Basil Bourquemattsmith5 更新时间:11/10/2023 访问量:78
java.time.OffsetDateTime 的 SQL Server 数据库列类型是什么?
What is the SQL Server Database column type for java.time.OffsetDateTime?
问:
我们正在尝试在 Java 中映射并插入到 SQL Server 中,使用 .我们的客户遍布全球多个不同的时区。OffsetDateTime
JDBCTemplate
OffsetDateTime 的正确 SQL Server/Azure SQL 数据列类型是什么?我在这里的图表中没有看到它。https://learn.microsoft.com/en-us/sql/connect/jdbc/using-basic-data-types?view=sql-server-ver16
using java.time.OffsetDateTime
private OffsetDateTime purchaseDate;
我正在考虑 MS SQL ,但是该表将 Java 类型显示为 ,而不是 。datetimeoffset
microsoft.sql.DateTimeOffset
java.time.OffsetDateTime
但是,在 SQL 中使用似乎适用于 ,只是想确定一下。datetimeoffset
java.time.OffsetDateTime
答:
数据类型 | 标准 SQL | MS SQL 服务器 | 爪哇岛 |
---|---|---|---|
时间线上的点 | TIMESTAMP WITH TIME ZONE |
datetimeoffset |
在 JDBC 中,使用 OffsetDateTime 。在 JDBC 之外,通常最好使用 Instant 或 ZonedDateTime 。 |
要表示时间轴上的特定点,请使用 SQL 标准类型 。在 Microsoft SQL Server 中,该类型映射到 datetimeoffset
。TIMESTAMP WITH TIME ZONE
Java 提供了三个类来表示时间轴上的一个点:
java.time.Instant
java.time.OffsetDateTime
java.time.ZonedDateTime
第一个表示与UTC的时间子午线偏移为零时分秒的时刻。第二个是类似的,但可以有早于/晚于UTC的任意小时数-分钟-秒的偏移量。第三个包含一个时区,该时区是特定地区人民根据其政治家决定的过去、现在和未来偏移量的命名历史。
SQL标准几乎没有涉及日期时间问题,而且做得很差。该标准缺少 和 类中捕获的概念。因此,JDBC仅将类映射到类型的列。Instant
ZonedDateTime
OffsetDateTime
TIMESTAMP WITH TIME ZONE
至于你的图表,我不知道发生了什么。该图表似乎引用了此类 microsoft.sql.Types.DATETIMEOFFSET。该类似乎是 Microsoft JDBC 驱动程序的一部分。但是Microsoft定义自己的JDBC映射类是没有意义的,因为该类与JDBC兼容的程序不兼容。我不是 Microsoft 客户,因此我无法提供解释。
评论
Instant
类的 Javadoc 的文档。对于通常由 Java 开发人员构建的业务应用程序而言,GMT、UTC 和 Java Time-Scale 之间没有实际区别。