目前的问题是将数据插入到具有DBCLOB列的DB2表中。表的编码是Unicode。子系统是MIXED YES,日语CCSID设置为(290,930,300)。该应用程序绑定了ENCODING CCSID。
我成功地使用Unicode来获取DBCLOB的数据,没问题。但当我转身并尝试将其重新插入时,插入的数据被解释为不是Unicode,似乎DB2认为它的EBCDIC DBCS / GRAPHIC,插入的行显示Unicode 0xFEFE。当我手动更新插入到有效DBCS的数据时,数据插入OK并显示预期的Unicode DBCS值。
要插入数据,我使用动态准备的INSERT语句和DBCLOB列的占位符。与占位符关联的SQLVAR条目是DBCLOB_LOCATOR,其CCSID设置为1200。 正在创建一个DBCLOB定位器,执行SET dbclobloc = SUBSTR(dbclob,1,length)。创建的定位器正在放入SQLDA。然后正在执行准备好的INSERT。
似乎DB2忽略了与DBCLOB_LOCATOR SQLVAR关联的1200 CCSID。尝试在INSERT中的占位符上放置CAST(?AS DBCLOB CCSID UNICODE)没有帮助,因为那时DB2似乎已经决定了要插入的数据的编码。
我被困住了:(任何想法?
格雷格
答案 0 :(得分:0)
我想我认为它并不好:DBCLOB_LOCATOR的SET语句是静态SQL,DBRM绑定了ENCODING EBCDIC。因此,DB2别无选择,只能假设数据位于计划的CCSID中。 我也尝试了书中的建议并使用了SELECT ... FROM SYSIBM.SYSDUMMYU来设置DBCLOB_LOCATOR。这应该告诉DB2数据是以Unicode形式出现的。但它再次失败,症状表明它仍然承担了DBCS EBCDIC CCSID。
不好。