SAPA HANA JDBC元数据

SAPA HANA JDBC元数据,jdbc,metadata,sap,union,hana,Jdbc,Metadata,Sap,Union,Hana,执行联合时,HANA JDBC驱动程序会为列返回不同的元数据类型,即使联合中的两列具有相同的类型 考虑以下情况: create table test ( A NCHAR(1), B NCHAR(1) ); insert into test values('A','B'); select a from test union select b from test; 如果我检查resultset的元数据,结果列的类型是NVARCHAR,而不是预期的NCHAR,尽管两列的类型都是N

执行联合时,HANA JDBC驱动程序会为列返回不同的元数据类型,即使联合中的两列具有相同的类型

考虑以下情况:

create table test (
    A NCHAR(1),
    B NCHAR(1)
);

insert into test values('A','B');

select a from test union select b from test;
如果我检查resultset的元数据,结果列的类型是NVARCHAR,而不是预期的NCHAR,尽管两列的类型都是NCHAR

但是,如果我运行查询:

select a from test union select a from test;
JDBC元数据返回预期的类型NCHAR

其他数据库(尤其是Oracle)的行为与此不同。如果两列的类型相同,则JDBC类型将在联合上保留

下面是我正在使用的JDBC驱动程序的详细信息

Implementation-Title: SAP HANA JDBC Driver
Implementation-Vendor: SAP SE
Implementation-Version: 2.0.5-e130cbef291d3b62d5b138d3d5ce24e251013ac2
有什么想法吗? 我有没有办法强迫司机保留类型


提前感谢

不幸的是,我们不知道您使用的驱动程序版本。但是,我怀疑这是由于HANA的内部行为,因为
(N)CHAR
是不推荐使用的数据类型。在本例中,HANA正确地提供了受支持的类型
(N)VARCHAR

对不起,我的错误已更正。如果我在联合中选择相同的列,JDBC类型将被保留。我添加了驱动程序的详细信息(请参见上文)。如果我在联合中选择相同的列,JDBC类型将被保留。实际上,HANA支持(N)字符。据我所知,最初的计划是反对这些类型,但它们已被放弃。如果您已经搜索了关于此主题的官方声明,但没有找到。您能给我发一个链接或文档参考吗?官方声明这些JDBC类型已被弃用。当前的文档清楚地表明,不支持固定长度字符类型,仅保留用于向后兼容。类型强制实际上发生在联合操作符(HANA服务器)中,而不是JDBC驱动程序软件中。查询优化器确实理解,在您的第二个示例中,它处理的是完全相同的列,因此它确实选择了不同的联合实现(联合与物化联合)。