将使用hibernate的Java代码生成的CSV文件中的报告存储到Oracle 11g中包含“ BLOB ”数据类型的列中时,会将所有特殊字符转换为问号( ?)。对于Oracle DB的字符编码是 WE8ISO8859P1 ,据我所知,数据库的字符集编码应为UTF-8或AL32UTF-8以支持所有UTF -8个字符。但由于这是在生产中运行的现有应用程序,因此涉及到风险因素,因此无法将字符集修改为UTF-8 / AL32UTF-8。我一直在寻找可以在保存选项期间从Java代码应用的一些解决方案,以便强制执行字符集。 我试过下面的代码
testReport.setTestReportBlob(new SerialBlob(byteArrayToStore));
使用Hibernate存储保存reportBlob对象,
getCurrentSession().saveOrUpdate(testReport);
当我们从blob数据类型中提取xl时,它会将特殊字符显示为“?”。
下面是我们在设置要存储在数据库中的字节数组之前强制执行字符集的代码
fileProcess.setFiledata(exchange.getIn().getBody(String.class).getBytes());
设置以下属性useUnicode=true&characterEncoding=UTF-8 while getting the connection from the oracle database
会有所帮助吗?非常感谢任何帮助或建议。非常感谢提前
PS:我使用forad作为db客户端的oracle。