我在 Db2 i (Db2400) 上有一个遗留数据库,其中表(物理文件)名称及其字段包含一些变体字符,如 @ 和 #。我的应用程序使用简单的 JDBC 访问这些表中的数据。
当我的 IBM i 机器使用默认 CCSID(即 65535 和英语 CCSID)时,这工作正常。
但是 SQL 查询在像 871(冰岛)这样的 CCSID 上失败,它以不同的方式对待 @ 字符。它给出了错误:
[SQL0113] Name T@BNAME not allowed.
我尝试了几种方法来解决问题,例如设置 JDBC 连接 url 属性:
“包 ccsid”为 1208 (UTF-8)。
“package ccsid”- 指定用于 SQL 包和发送到系统的任何语句的字符编码。
另一种方法是为此类表创建别名。但是如果这些字符出现在列名中,那么我们就不能在不重新创建表结构的情况下为这些字符创建别名。
我希望我的 JDBC 查询能够在不同的 CCSID 中正常运行。建议不要在 SQL 对象名称中使用此类字符。但正如我所说,我的数据库是遗留数据库,无法轻易更改/修改。
最佳答案
为列名中有问题字符的表创建 View 而不是别名。您可以为 View 定义中的列指定新名称。
关于ibm-midrange - 对名称带有 @ 或 # 字符的表运行 SQL 查询会在不同的 CCSID 上显示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150016/