DB2中如何将存十六进制XML的BLOB转换为ASCII?
解决DB2中BLOB存储的ASCII XML转换问题
针对你遇到的BLOB列存储ASCII格式XML(查询显示为十六进制字符串)的转换需求,可直接使用指定CCSID的类型转换实现,无需额外权限:
可行的转换SQL
SELECT SAVED, CUST_ID, CAST(XML_DATA AS VARCHAR(16777216) CCSID 819) AS XML_CONTENT FROM FOO_TABLE WHERE CUST_ID = 1234
- 若XML实际为UTF-8编码,将
CCSID 819替换为CCSID 1208即可。
之前方法失败的原因
- 方法1:
cast(hex(xml_data) as varchar(1000))错误地先将BLOB转为十六进制字符串,再重复转换,且长度限制可能触发SQL0171N(参数类型/长度无效)。 - 方法2:使用
TRANSLATE搭配CCSID UNICODE属于误用函数,TRANSLATE是字符替换工具,而非编码转换工具,因此触发SQL0622N(CCSID组合转换无效)。 - 方法3:
FOR BIT DATA的TRANSLATE会将BLOB视为纯二进制数据,不进行编码解析,自然返回原始十六进制内容。
原理说明
你的BLOB列实际存储的是XML文本的ASCII编码字节(如<对应十六进制3C,即BLOB中的字节值),通过CAST指定对应字符集的CCSID,DB2会直接将二进制字节解析为对应编码的文本,无需额外函数或系统设置修改。
内容的提问来源于stack exchange,提问作者DublinMeUp
相关产品推荐
相关产品推荐

