在使用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`是最常用的字符数据类型之一,用于存储变长的字符串。然而,在定义`VARCHAR2`类型时,可以选择指定长度为`BYTE`或`CHAR`。这两种方式看似细微的差别,实际上却对数据存储、性能优化以及...
在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...
- **RAW 和 VARCHAR2 格式**:RAW 是 Oracle 中存储二进制数据的一种格式,VARCHAR2 则是存储变长字符串的格式。通过将数据先转换为 RAW 再转换回 VARCHAR2,可以绕过编码问题。 - **DBLink**:Oracle 中的数据库...
VARCHAR2 是 Oracle 自己定义的一个非工业标准 VARCHAR,不同在于,VARCHAR2 用 NULL 代替 VARCHAR 的空字符串。 三、NVARCHAR 类型 NVARCHAR 类型是可变长度的 Unicode 字符类型,长度可以变化,例如 NVARCHAR(20...
在Oracle数据库中,VARCHAR2()和NVARCHAR2()都是用于存储字符数据的变量长度数据类型,但它们之间存在显著的差异。以下是对这两个数据类型的详细解释: 1. VARCHAR2() VARCHAR2() 是Oracle中的标准可变长度字符...
默认字符集用于CHAR、VARCHAR、VARCHAR2、CLOB等类型的数据,而国家字符集服务于NCHAR、NVARCHAR、NVARCHAR2、NCLOB等类型,以处理多语言需求。例如,当数据库的默认字符集为ZHS16GBK,国家字符集为AL16UTF16时,...
1. 数据类型:Oracle支持多种数据类型,如CHAR、VARCHAR2(可变长度字符串)、NUMBER(数字)、DATE(日期)等。了解这些数据类型有助于正确创建和管理表。 2. 创建表:使用CREATE TABLE语句来创建表,例如: ```...
Oracle SQL支持多种数据类型,如CHAR、VARCHAR2(可变长度字符串)、NUMBER(数字)、DATE(日期时间)、CLOB(大对象,用于存储文本)、BLOB(大对象,用于存储二进制数据)等。选择正确的数据类型对于数据的存储和...
### Oracle数据库中汉字排序方法 在Oracle数据库中处理中文数据时,经常需要对包含中文字符的数据表...通过以上内容的学习与实践,我们可以有效地在Oracle数据库中实现汉字排序功能,从而更好地管理和利用中文数据。
因此,一个VARCHAR2(10)的列可以存储2个汉字,因为每个汉字占用2字节,总共不超过4000字节。 在Oracle中,数据类型的长度单位是字节,这意味着在规划表结构时,需要考虑到字符集和可能的多字节字符。使用DUMP函数...
### Oracle 教程:中文教程与数据库教程 #### 前言 Oracle 是一款非常流行的数据库管理系统,在企业和大型组织中广泛使用。对于那些处理大量数据的系统而言,Oracle 提供了丰富的工具和技术来优化性能。本文将重点...
例如,插入一个中文字符到`VARCHAR2`字段中,如果使用的是UTF8字符集,该字符可能会占用两个字节;而在`NVARCHAR2`字段中,它将按单个字符计算,不论字符集。 接下来是二进制串类型,包括`RAW`,`BLOB`,以及已过时...
1. VARCHAR2:这是Oracle中最常用的变长字符类型,它可以存储0到32767个字符。VARCHAR2节省空间,因为只存储实际输入的字符数,但长度是不固定的,这可能会导致排序和索引的问题。 2. CHAR:这是一种定长字符类型,...
- 对于长文本,超过4000字节的限制,可以使用CLOB类型,并借助DBMS_LOB包进行操作。 - 序列号:通过`CREATE SEQUENCE`创建自增序列,如`CREATE SEQUENCE 序列号的名称 INCREMENT BY 1 START WITH 1 MAXVALUE 99999...
Oracle支持多种数据类型,如`CHAR`、`VARCHAR2`、`NUMBER`和`DATE`。创建表时,小字段在前,可空字段在后,中文字段名虽可行,但推荐使用英文。可以设置默认值和约束,如`DEFAULT`和`UNIQUE`、`PRIMARY KEY`。 2. *...