DB2 到 COBOL 字符串丢失换行和回车 Returns

DB2 to COBOL String Losing Line Feed and Carriage Returns

我正在尝试从 table 中获取一些数据。变量是 VARCHAR 30000,当我使用 COBOL EXEC SQL 检索它时,返回了字符串,但没有必要的(十六进制)换行和回车 Returns。我一次检查字符串一个字符,寻找 0A 或 0D 的十六进制值,但它们从未出现。

一旦将字符串填充到我的 cobol 变量中,LF 和 CR 似乎就丢失了。

想法?

我见过CR和LF在数据库数据中的情况。这些是有效字符,因此可以将它们存储在那里。

您是否尝试过使用其他工具或方法确认数据库中确实存在 CR 和 LF 字符?我的 Z 系列体验非常有限,因此我无法提供选项建议。但是,Z 系列上必须有一些等效的 SSMS 和 SQL 服务器来查询 DB2 数据库。

查看有关查询 DB2 和清理 CR 和 LF 字符的 SO link。

DB2/iSeries SQL clean up CR/LF, tabs etc

如果在主机上检索时数据被存储/转换为ebcdic,你应该得到EBCDIC换行字符x '15' 十进制 = 21 而不是 0A 或 0D。

只有当您以 ASCII/UTF-8 格式检索数据时,您才会得到 0A 或 0D。


大多数 java 编辑器可以编辑 EBCDIC(使用 EBCDIC 换行符 x'15')就像编辑 ASCII(使用 \n)一样容易,但 Eclipse 不确定。

好吧,我相信这可能取决于方言(COBOL 和 DB2),但如果是我,我会在 table 定义中的 VARCHAR 上使用 FOR BIT DATA。您的问题还可能与为 table 所在的数据库定义的代码页有关。

我经常将各种二进制、EBCDIC 和 Unicode 数据混合存储在同一个 VARCHAR FOR BIT DATA 列中,没有任何问题,而您要做的只是包括 CR 和 LF。我的方法适用于 DB2 z/OS 和 DB2 LUW。

希望对您有所帮助。