我试图从表中获取一些数据。变量是VARCHAR 30000,当我使用COBOL EXEC SQL检索它时,返回字符串但没有必要的(十六进制)换行和回车。我一次检查字符串一个字符,寻找0A或0D的十六进制值,但它们永远不会出现。
将字符串填入我的cobol变量后,LF和CR似乎就会丢失。
想法?
答案 0 :(得分:1)
如果在主机上检索时将数据存储/ 转换到ebcdic,您应该获得EBCDIC换行字符x'15'十进制= 21而不是0A或0D。
只有在检索ASCII / UTF-8中的数据时才会得到0A或0D。
大多数java编辑器可以像编辑EBCDIC(使用EBCDIC新行字符x'15')一样轻松编辑(使用\ n),但不确定Eclipse。
答案 1 :(得分:0)
我已经看到CR和LF存在于数据库中的数据的情况。这些是有效字符,因此可以将它们存储在那里。
您是否尝试使用其他工具或方法确认数据库中确实存在CR和LF字符?我的Z系列体验非常有限,所以我无法提出建议。但是,在Z系列上必须有一些等效的SSMS和SQL Server来查询DB2数据库。
在查询DB2并清理CR和LF字符时查看此SO链接。
答案 2 :(得分:0)
嗯,我相信这可能是依赖于方言的(COBOL和DB2),但如果是我,我会在表定义中的VARCHAR上使用FOR BIT DATA。您的问题还可能与为表所在的数据库定义的代码页有关。
我经常存储在同一个VARCHAR FOR BIT DATA列中混合的各种二进制,EBCDIC和Unicode数据,没有任何问题,你要做的就是包括CR&如果。我的方法适用于DB2 z / OS和DB2 LUW。
我希望这会有所帮助。