实体框架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 个字符