在名称带有@或#字符的表上运行SQL查询会在不同的CCSID上显示问题

时间:2019-05-15 13:00:35

标签: ibm-midrange db2-400

我在Db2 i(Db2400)上有一个旧数据库,其中的表(物理文件)名称及其字段包含一些变体字符,例如@和#。我的应用程序使用简单的JDBC访问这些表中的数据。

当我的IBM i机器使用默认CCSID(即65535和英语CCSID)时,此方法工作正常。

但是SQL查询在CCSID上失败,例如871(冰岛),对@字符的处理方式有所不同。它给出了错误:

[SQL0113] Name T@BNAME not allowed.

我尝试了几种解决问题的方法,例如设置JDBC连接url属性:

将“包ccsid打包”到1208(UTF-8)。

“程序包ccsid”-指定用于SQL程序包和发送到系统的任何语句的字符编码。

其他方法是为此类表创建别名。但是,如果这些字符出现在列名中,那么在不重新创建表结构的情况下我们无法为它们创建别名。

我希望我的JDBC查询可以在不同的CCSID中正常运行。建议不要在SQL对象名称中使用此类字符。但是正如我所说,我的数据库是旧数据库,不能轻易更改/修改。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用CCSID 871中与CCSID 37中@的位置相匹配的字符。

在CCSID 37中,字符@x'7c'。在CCSID 871中,x'7c'Ð。因此,请尝试使用列名称TÐBNAME。

以下是指向两个EBCDIC表的链接:

请注意,这两个字符会切换表中的位置。

答案 1 :(得分:2)

为列名称中有问题字符的表创建视图而不是别名。您可以为视图定义中的列分配新名称。