在使用oracle时,如果在一个varchar2(4000)的字段上插入的字符过长(一般只能插入666个汉字,视字符集不同会有所不同),经常回报“数据库异常错误”,具体报错会因驱动版本不同而不同。
原因一:
666 汉字所用的编码里 (可能是 UTF8) 每个字占了 3 bytes,当存的时候, 没有作好 charset-encoding 的转换,造成你的每个 byte 被当成是 java 的一个 char (2 bytes) 来存,这时,每个汉字要用 3x2=6 bytes 存进 oracle 中,所以最多只能存到 4000/6=666 字。
原因二:
这是个OracleJDBC问题。一般直接用ps.setString()设置字符串数据时,Oracle的JDBC驱动会将中文转换为2字节或3字节,不固定的,因此经常会越界。如果改为ps.setCharacterStream()就是固定的每个中文两个字节。
解决办法:
方法一:
使用ps.setCharacterStream()插入多个字符:
原来的代码
//ps.setString(i, ((String) parameter));
String s = (String) parameter;
ps.setCharacterStream(i, new StringReader(s), s.length());
方法二:
不用PreparedStatement,而直接组成sql语句插入。
方法三:
用CLOB字段来解决。
分享到:
相关推荐
oracle中varchar2(byte)和varchar2(char) 细节决定成败,大家在设计数据库建表的时候一定要注意。
Oracle接收长度大于4000的字符串 Oracle接收长度大于4000的字符串
oracle char,varchar,varchar2的区别和使用方法 非本人总结,但是说的挺好的! 欢迎下载
浅析Oracle中char和varchar2的区别 电脑资料.docx
Oracle SQL 函数进行BLOB转换Varchar2
今天在实践过程中遇到一个问题, 我想往数据库插入多条数据时,使用了如下语句: insert into 表1 (字段1,字段2) values (1,2...ci_id varchar2(20) not null, stu_ids varchar2(100) ); create table pm_stu( stu_id
char是定长的 char(10) varchar2(10) 同样存 a ,char占用了10个字符,varchar2 只占用了 一个字符(一个中文占两个字符,英文占一个)。 但是char的查询速度要比varchar2快。varchar2,Oracle还要进行语法分析,这...
是处理wm_concat中以varchar处理合并列字段过小。 clob 可以加大处理。 oracle 9I oracle 10G 必备
NULL 博文链接:https://yizhilong28.iteye.com/blog/824656
create or replace procedure test_msg(i_user in varchar2, o_msg out varchar2) is begin o_msg := i_user ||', Good Morning!'; end; 然后,开始在Python命令行中进行存储过程调用。 import cx_Oracle as cx ...
为了方便更好的设计数据库,特意为用户讲述了以下它们呢之间的关系!
用过Oracle的人都知道,Oracle有一种数据类型叫VARCHAR2,用来表示不定长的字符串。VARCHAR2也是Oracle公司推荐使用的类型。但使用VARCHAR2有个问题:最大只能表示4000个字符,也就相当于2000个汉字。如果你的程序中...
Oracle的数据类型: 1、CHAR数据类型,该类型是固定长度的字符串,如果没指定大小,则默认占用一字节,如果输入的值小于... 8、ORACLE其实也支持INTEGER,FLOAT,DOUBLE,VARCHAR,最好用ORACLE自身的NUMBER 和 VARCHAR2
讲述主流大型数据库oracle和DB2的数据类型
oracle中varchar与date的转换,number与varchar的转换.pdf
主要介绍了Mysql中varchar长度设置方法的相关资料,本文还给大家带来了valar类型的变化及char()和varchar()的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下
oracle数据库表结构转gp数据库表结构、转mysql、数据库时表字段长度问题
AccountInfo VarChar2(1000), TransferMethod Char(1), --A: ASCII, E: EBCDIC, I: IMAGE TransferOption Char(1), LocalDirectory VarChar2(30), LastReply VarChar2(32767 ) ); ...
Oracle P/L SQL实现文件压缩、解压功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 Create or Replace Package UTL_ZIP AUTHID CURRENT_USER as Type File_List is Table of Clob; -...
NULL 博文链接:https://wy649898543.iteye.com/blog/1446712