实体框架oracle:将超过2000个字符插入VARCHAR2(4000 CHAR)失败

Posted

技术标签:

【中文标题】实体框架oracle:将超过2000个字符插入VARCHAR2(4000 CHAR)失败【英文标题】:entity framwork oracle : inserting more than 2000 characters into a VARCHAR2 (4000 CHAR) fail 【发布时间】:2016-04-23 23:00:27 【问题描述】:

我们使用 .NET Entity Framework 6.0 和 Oracle 12g。

在 VARCHAR2 (4000 CHAR) db 列中插入超过 2000 个字符时,我们会收到 Oracle 错误。

 ORA-01461: can bind a LONG value only for insert into a LONG column`

请问这个问题怎么解决

【问题讨论】:

听起来很像 UTF-16/UCS-2 问题。你的数据库字符集是什么? 【参考方案1】:

在官方documentation中提到限制是

最大大小:4000 字节

但在现实生活中 双字节字符为 2000

要解决此问题,您可以使用CLOB 而不是VARCHAR2

【讨论】:

不幸的是,4000 个字符的限制对于 CLOB 来说仍然是个问题。如前所述here.【参考方案2】:

这让我今天有点头疼。为了在不接触数据库的情况下解决它,我在 OnModelCreating() 中添加了以下内容。

modelBuilder.Properties<string>().Configure(p => p.HasColumnType("VARCHAR2"));

如果需要,您还可以逐个实体地执行以下操作,但对我来说,所有字符串都映射到 VARCHAR2,所以我选择了前者:

modelBuilder.Entity<SomeEntity>().Property(x => x.SomeProperty).IsUnicode(false);

【讨论】:

以上是关于实体框架oracle:将超过2000个字符插入VARCHAR2(4000 CHAR)失败的主要内容,如果未能解决你的问题,请参考以下文章

oracle pl/sql 错误:不能 put_line 超过 2000 个字符

ORA-01704 错误,插入长度超过 4000 个字符的字符串

SQL server TVP批量插入超过2000个参数

需要使用实体框架将大量记录插入数据库

Oracle常用数据类型

插入oracle的long类型,报字符串过长怎么解决