CHAR(1)字段中出现ORA-12899错误,但我只发送'C'

Key*_*eyo 4 c# oracle odp.net oracle10g ora-12899

我的Oracle数据库返回错误:

ORA-12899 - 列TIT.ESTADO_CIVIL(实际值:2,最大值:1)的值太大

但我非常确定发送的值是一个独特的char'C'.

谁知道为什么会这样?

(我正在使用C#和ODP.NET)

APC*_*APC 5

"C#char有16位;谷歌搜索告诉我,Oracle CHAR类型是8位."

有几种方法可以解决这个问题.最好的解决方案是修复数据库,使其使用字符语义.

alter system set nls_length_semantics = char
/ 
Run Code Online (Sandbox Code Playgroud)

由于这会产生重大影响,因此您需要确保它能解决您的问题.修改表以使用字符语义,并查看它是否删除了ORA-12899异常.

SQL> create table t69 (col1 char(1 byte))
  2  /

Table created.

SQL> desc t69
 Name          Null?    Type
 ------------- -------- ----------------
 COL1                   CHAR(1)


SQL> alter table t69 modify col1 char(1 char)
  2  /

Table altered.

SQL> desc t69
 Name          Null?    Type
 ------------- -------- ----------------
 COL1                   CHAR(1 CHAR)

SQL>
Run Code Online (Sandbox Code Playgroud)

该文档提供了许多有关全球化和字符集的有用信息.你没有说你正在使用哪个版本的数据库,所以这里是关于长度语义的9i文档的链接.