首页 > 解决方案 > 在名称带有 @ 或 # 字符的表上运行 SQL 查询会在不同的 CCSID 上显示问题

问题描述

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

当我的 IBM i 机器使用默认 CCSID 即 65535 和英文 CCSID 时,这可以正常工作。

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

[SQL0113] Name T@BNAME not allowed.

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

“包 ccsid” 为 1208 (UTF-8)。

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

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

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

标签: ibm-midrangedb2-400

解决方案


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


推荐阅读