【问题标题】:jTDS incorrectly reports data type info in result set metadata (for DATE columns, reports NVARCHAR)jTDS 错误地报告结果集元数据中的数据类型信息(对于 DATE 列,报告 NVARCHAR)
【发布时间】:2012-05-08 17:46:00
【问题描述】:

目前,针对 Microsoft SQL Server 2008 的 jTDS JDBC 驱动程序 (1.2.5) 似乎错误地将 DATE 列的数据类型报告为 NVARCHAR。

对于早期版本的 jTDS 和 SQL Server(2005、2000),它的行为可能相同

  • 是否有不需要切换到其他驱动程序(例如 Microsoft 自己的驱动程序)或修补 jTDS 驱动程序的解决方法?

  • 另外,我想避免必须对数据字典(INFORMATION_SCHEMA.COLUMNS 视图等)执行查询以查找数据类型信息(并可能交叉引用“ exec sp_datatype_info" 以检索 SQL 数据类型)

快速浏览 jTDS 突出的错误并不能说明这是否会被修复。

这个问题的答案:JDBC - JTDS bug ? For columns of type date and time(x) 似乎表明这在 SQL Server 2005 中不会发生。

提前致谢。

【问题讨论】:

  • +1 我也有同样的问题。有什么解决办法吗?

标签: sql-server-2008 jdbc jtds database-metadata


【解决方案1】:

我找到了符合条件的解决方案

metaData.getColumnType(columnNumber) == 12

如果满足这个条件,就执行查询

SELECT System_Type_Id FROM Sys.Columns WHERE Name = [column name] AND Object_Id = (SELECT Object_Id FROM Sys.Tables WHERE Name = [table name])

对于smalldatetime,它将返回58

对于datetime,它将返回61

【讨论】:

  • 有趣的发现。不幸的是,如果有一个需要 10 个字节存储的 VARCHAR(或 NVCHARCHAR),上述条件也将评估为真(VARCHAR 列的 getPrecision() 将返回存储字节数,而 getColumnDisplaySize() 将返回长度)。
猜你喜欢
  • 2015-05-19
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多