ibm-midrange - 在名称带有 @ 或 # 字符的表上运行 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 对象名称中使用此类字符。但正如我所说,我的数据库是旧数据库,不能轻易更改/修改。
解决方案
为列名中有问题字符的表创建视图而不是别名。您可以为视图定义中的列分配新名称。
推荐阅读
- iis - 防止 ClaimsTransformation 在每个 HTTP 请求上运行
- amazon-s3 - AWS - Redshift 十进制问题
- visual-studio-code - 在清除缩进时在上面插入行
- node.js - Try/catch 发送电子邮件并创建数据库条目,即使它不应该
- azure-logic-apps - LogicApp - 如何使用长度检查集合是否为空
- javascript - HighStock 如何通过回调的多个度量来知道哪个度量已更改?
- html - 如何使用位置将标签带到另一个标签的中间
- c# - 在 Blazor .net 核心应用程序中查找连接字符串时出错
- python - Python/Numpy 与 Fortran 运行时间
- swiftui - SwiftUI TabView 不起作用,它只是在屏幕外显示文本