ibm-midrange - 对名称带有 @ 或 # 字符的表运行 SQL 查询会在不同的 CCSID 上显示问题

标签 ibm-midrange db2-400

我在 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/

相关文章:

ibm-midrange - CL 程序中的堆栈实现 (OS400/iSeries)

在 iSeries 上从 CL 调用 write() C API

java - 在不同线程中调用SQL更新后如何修复 'SQLException SQL0913'

php - iSeries 上的 PDO ODBC 到 IBM DB2 导致 Ubuntu Server 上出现段错误

DB2 400 删除列

c# - 针对指定 *LIBL 而不是特定库的 AS400 执行 SQL

php - git 是否安装在 IBM/AS400 中

ibm-midrange - 如何在 RPGLE 中获取角色的 EBCDIC 值?

ruby - 通过 Linux/OSX 连接到在 iSeries AS400 上运行的 DB2 (DB2/400) 数据库

java - 无法将字符集 65535 中的字节转换为日语 (5035)