首页 > 解决方案 > DBVisualizer 在包含“0001-01-01”的日期字段上显示空值

问题描述

我在 DbVis 中发出了一条 SQL 语句:

select vestdate, name from person where vestdate is not null

并得到了许多结果,其中 DbVisualizer 将vestdate 显示为(null)

调查后发现,vestdate 是'0001-01-01',所以查询正确返回了这些记录,但 DbVisualizer将它们显示(null)

我刚刚从 windows 8 切换到 windows 10。
它适用于 windows 8(显示 '0001-01-01'),但不适用于 windows 10(显示 null):

Product: DbVisualizer Pro 11.0.4 [Build #3103]
OS: Windows 8.1
OS Version: 6.3
OS Arch: amd64
Java Version: 1.8.0_252
Java VM: OpenJDK 64-Bit Server VM
Java Vendor: AdoptOpenJDK
Java Home: c:\program files\dbvisualizer\jre
DbVis Home: C:\Program Files\DbVisualizer
User Home: -------
PrefsDir: -------
SessionId: 55
BindDir: -------
Product: DbVisualizer Pro 11.0.5 [Build #3113]
OS: Windows 10
OS Version: 10.0
OS Arch: amd64
Java Version: 1.8.0_252
Java VM: OpenJDK 64-Bit Server VM
Java Vendor: AdoptOpenJDK
Java Home: c:\program files\dbvisualizer\jre
DbVis Home: C:\Program Files\DbVisualizer
User Home: -------
PrefsDir: -------
SessionId: 968
BindDir: -------

任何想法如何让程序向我展示真正的价值,而不是 null 的解释值?

标签: dbvisualizer

解决方案


IBM 支持文档中解释了该问题:

问题

尝试将日期值插入到 1940 年之前或 2039 年之后的日期列中,会将相应数据库表中的日期表示为 NULL。

原因

这是由 IBM i 数据库 Toolbox JDBC 驱动程序的限制引起的,如相关链接中所述:

Toolbox JDBC 驱动程序如何处理 1940 年之前(或 2039 年之后)的日期?IBM i 数据库支持多种日期格式。Toolbox JDBC 驱动程序使用在 IBM i 系统上设置为默认值的日期格式。此默认值通常设置为“mdy”,仅支持 1940 到 2039 之间的日期。您可以通过在打开 JDBC 连接时指定“日期格式”属性来覆盖日期格式。最好的选择是“iso”,它支持完整的四位数日期。最简单的方法是在连接数据库时使用的 URL 末尾添加“;date format=iso”。

解决问题

通过 Preferences-> EGL-> SQL Database Connections 将“;date format=iso”附加到适用数据库的主机连接属性将正确显示相应的日期,例如:

1939-01-01。

可以通过执行以下操作在 DBVisualizer 中修复该问题:

  1. 数据库 -> 编辑数据库连接...
  2. 选择属性选项卡
  3. 选择驱动程序属性
  4. 编辑参数date formattime format成为iso
  5. 应用更改
  6. 断开并重新连接

推荐阅读