0

具有查询 DB2 数据库并将输出导出到文件的 shell 脚本。当我在没有导出的情况下使用 SQL 语句时,我得到以下信息:

su - myid -c 'db2 connect to mydb;db2 -v "select COL1"; db2 connect reset;'

样本输出

COL 1
x'20A0E2450080000'
x'50D24520E100GDS00'
x'10H0EFJ10080000'
x'50A0GH0080000'
x'80RHE1008B0000'
x'70A50E1F4008000'
x'10F329EF09BB0'

但是,当我使用完全相同的查询导出结果时,我得到以下信息:

su - myid -c 'db2 connect to mydb;db2 -v "EXPORT TO '/tmp/query_results.out' OF DEL MODIFIED BY COLDEL: select COL1 from MYTABLE"; db2 connect reset;'

样本输出

hôª"
"xàÓ °á
"èÅ °á
hôª"
"é# °á
hôª"
"é« °á
hôª"
"éÅ °á
hôª"
"""ÒYá   á
hôª"
"#sYá    á
hôª"

我假设这是由于单引号字符。由于它们前面都有另一个字符,因此我无法在它们前面添加“\”。我也尝试在查询中运行 substr 函数,但我仍然得到相同的结果,只是更短。我确信一定有什么我忽略了,所以在我自己尝试了几天(并且失败了)之后,我转向你们。任何帮助将不胜感激。

*编辑:只是想补充一点,我的实际选择语句包括多个正确显示的列。因此,在几列中,只有一列显示错误数据。

4

1 回答 1

2

我假设这是由于单引号字符”——不。此特定列包含二进制数据,无论是 BLOB 还是 VARCHAR FOR BIT DATA。如果是 BLOB,请在 EXPORT 命令中指定 LOBS TO,这样 BLOB 将被写入二进制文件。如果它是 VARCHAR FOR BIT DATA,您可以在导出 ( export to ... lobs to ... select blob(your_column)...) 时将其转换为 BLOB 或将其导出为hex(your_column),具体取决于您计划稍后对导出执行的操作。

VARCHAR FOR BIT DATA 的另一种选择是使用 IXF 格式而不是 DEL 导出表,这将保留二进制字符串。

于 2013-07-29T20:27:50.620 回答