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



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

当我的IBM I机器在默认CCSID上,即65535和英语CCSID时,这可以正常工作。

但是SQL查询在诸如871(冰岛(之类的CCSID上失败,它以不同的方式对待 @字符。它给出了错误:

[SQL0113] Name T@BNAME not allowed.

我尝试了一些方法来解决问题,例如设置JDBC连接URL属性:

"包CCSID"至1208(UTF-8(。

"软件包CCSID" - 指定用于SQL软件包的字符编码以及发送到系统的任何语句。

其他方法是为此类表创建别名。但是,如果这些字符在列名中存在,那么我们将无法为没有重新创建表结构的人创建别名。

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

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

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

在CCSID 37中,字符@x'7c'。在CCSID 871中,x'7c'Ð。因此,尝试列名tðbname。

这是两个EBCDIC表的链接:

  • CCSID 37
  • CCSID 871

请注意,两个字符在表中切换位置。

相关内容

  • 没有找到相关文章

最新更新