如何解决oracle blob字段 的乱码问题

 我来答
0808xyj
推荐于2017-09-17 · TA获得超过1891个赞
知道大有可为答主
回答量:1237
采纳率:100%
帮助的人:1081万
展开全部

字符串以blob以byte[] 二进制的形式存成blob字段

案例一:

  1.  

  2. oracle数据库服务器系统使用的是UTF-8编码或者是AL32UTF8编码
    2.在Web应用中已经将请求编码设置为UTF-8编码
    3二进制数据的取得

     


        

  3.           Blob blogObj = rst.getBlob("CONTENT");
                        if(blogObj!=null){
                            byte[] content = blogObj.getBytes(1, (int) blogObj.length());
                                try {
                                    news.setContent(new String(content));
                                } catch (UnsupportedEncodingException e) {
                                   
                                    e.printStackTrace();
                                }
                               
                        }

    乱码问题的解决方法:
                                news.setContent(new String(content,“UTF-8”));

案例二:读取blob,解决oracle中blob字段下载后的乱码问题

解决方法:注意不能按照像其他数据库那样的取法,而注意使用getBlob()这个oracle特有的方法。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (queryResult.next()) ...{
    tfzn018KtfjxxPO.setTec_attachid(queryResult.getLong("TEC_ATTACHID"));
    tfzn018KtfjxxPO.setTec_attachpostfix(queryResult.getString("TEC_ATTACHPOSTFIX"));
    java.sql.Blob blob = queryResult.getBlob("TEC_ATTACHCONTENT");
    InputStream is = blob.getBinaryStream();
    int bytesRead = 0;
    byte[] buffer = new byte[8192];
    // 从输入流读到字节数组
    while ((bytesRead = is.read(buffer, 0, 8192)) != -1) ...{
        // 从字节数组到输出流
        baos.write(buffer, 0, bytesRead);
    }
    byte[] bufferFile = baos.toByteArray();
    tfzn018KtfjxxPO.setTec_attachcontent(bufferFile);
    connection.commit();
}

总结如下:

1,导入导出的方法有问题,可能需要指定什么参数。

2,数据库版本不同,对blob的处理方法不一致所致。

3,jdbc连接问题。

通过注册表修改
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0
NLS_LANG 改为你需要的字符集.


常用字符集(暂时只收集到两个)
AMERICAN_AMERICA.WE8ISO8859P1
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
american_america.AL32UTF8


1--------- AMERICAN_AMERICA.zhs16gbk
2--------- AMERICAN_AMERICA.utf8

修改下注册表即可。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式