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

如题所述

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

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

1
2
3
4
5
6
7
8
9
10
11

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
修改下注册表即可。
温馨提示:内容为网友见解,仅供参考
无其他回答

oracle blob读取为什么部分乱码?
正确做法是使用clob类型存储大字段字符数据。clob(character large object)适合存储大量的文本信息。若需存储图片等二进制流数据,应确保其以二进制形式保存,而非转换为字符。这样读取时,才能避免乱码问题。总结来说,理解数据类型是关键。blob不适用于存储非二进制字符数据,反之亦然。选择正确的数据类型...

oracle blob读取出现个别乱码咋解决?
乱码问题的解决方法:news.setContent(new String(content,“UTF-8”));之后就不会出现乱码问题。

如何解决BDE中的BLOB字段错误
1.新建记录,插入BLOB数据 1.1首先新建记录的时候,使用oracle的函数插入一个空的BLOB,假设字段A是BLOB类型的:insert xxxtable(A,B,C) values(empty_blob(),'xxx','yyyy')1.2后面再查询刚才插入的记录,然后更新BLOB,在查询前,注意设置Connection的一个属性:conn.setAutoCommit(false);如果缺少这...

oracle BLOG变量中的内容在存储过程中读取后出现换行符异常,请问如何解 ...
n_test := lengthb(substrb(strv_see,1,6)); --等于多少? 我这边输出是6 dbms_output.put_line(lengthb(v_see));--- v_see := '万一'||chr(10)||'12314121131'; --这是做测试的,带一个换行符的字符串变量 n_test := lengthb(v_see); --跟踪到此时n_test = 16,串长包...

Oracle用blob字段插入仍旧报错ORA-01461: 仅能绑定要插入 LONG 列的 L...
table t_clob(seq int,str clob);insert into t_clob select rownum ,rpad('a',4000,'*') str from dual connect by rownum<=10;update t_clob set str=str||rpad('b',4000,'*')||rpad('c',4000,'*');commit;select * from t_clob; --源数据库--1.将clob字段的数据按4000转...

vb写clob乱码,求大神解答!
CREATE OR REPLACE PROCEDURE displayLOB IS Lob_loc cLOB;Buffer varchar2(254);Amount BINARY_INTEGER := 120;Position INTEGER := 1;BEGIN SELECT pm.b INTO Lob_loc FROM clob_test pm WHERE pm.a=1;LOOP DBMS_LOB.READ (Lob_loc, Amount, Position, Buffer);\/* Display the buffer ...

Linux+GlassFish系统,Oracle服务器为Windows系统,读数据库Blob字段JSP...
哥……1、2全是 UTF8 到了数据库你用什么 GBK 啊……

oracle sql语句更新大字段问题
BLOB为二进制字段 你update Dg_Supervise set FOUND_MAIN='111111111111' 当然报错了。'111111111111' 是字符串,不能存入二进制字段里面。如果你要更新BLOB你需要把你要更新的内容转换成二进制 然后写入找个字段。

oracle中如何实现blob和base64相互转换
1. BLOB转Base64:在Oracle中处理BLOB数据时,首先需要通过DBMS_LOB包的相关函数获取BLOB数据。然后,可以使用UTL_RAW包的函数将BLOB数据转换为RAW格式。得到RAW数据后,利用UTL_ENCODE包的base64_encode函数对其进行Base64编码。这样就可以将BLOB数据转换为Base64字符串。2. Base64转BLOB:对于Base64到...

如何用SQL操作oracle的blob字段里的字符串数据
create table tt1 (XXName varchar2(20),ProductIDs blob);--向测试表中插入数据 insert into tt1 select 'a',to_blob('a001b002') from dual;--查询blob字段中含有'a001'的记录select XXName from tt1 where mod(dbms_lob.instr(ProductIDs,'a001'),2)=1 --删除测试表 drop table t...

相似回答