我在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
请注意,两个字符在表中切换位置。