我在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对象名称中使用此类字符。但是正如我所说,我的数据库是旧数据库,不能轻易更改/修改。