System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。
2017-05-14 12:00
567 查看
一、引起的源头
环境:vs2015,sqlserver2008相关程序包:ef6
定义了一个实体article
public class Article { public string Data{get;set;} }
EntityTypeConfiguration的配置
Property(a => a.Data).IsRequired().HasColumnType("text");
这样可以正常生成表字段,而且类型也正确
插入数据的时候,就引起了以下异常
System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。
二、解决
刚开始,以为是没有指定导致转换错误[Column(TypeName="text")] public string Data{get;set;}
再次插入数据,还是导致一样的错误
经过多次试验,
最后结果就是 不指定类型为text,系统自动指定类型为 nvarchar(MAX)
三、解析
按SQL2005来说,varchar如果有定义字符数,那么最大就是8000,超过会产生二进制截断。而varchar(max)、nvarchar(max) 和 varbinary(max) 统称为大值数据类型。可以存储最大为 2^31-1 个字节的数据。
varchar ( max) 注解如下: varchar [ ( n | max) ] 可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节. 在 Microsoft SQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。
当存储字符长度<=8000时,存储机制跟常规varchar一样,实际占用空间=字符长度+2(结束标识)。
当存储字符长度>8000时,存储机制跟text一样。
varchar(max)支持的最大长度是系统支持的最大长度,如在32位SQL Server上其最大长度为2G字节。
字符长度小于等于8000时,不管varchar还是varchar(max)都是存多少占多少。
相关文章推荐
- System.Data.SqlClient.SqlException: 操作数类型冲突: tinyint 与 image 不兼容
- 查询数据库语句报错“数据类型 text 和 varchar 在 equal to 运算符中不兼容。"
- System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
- 解决:数据类型 text 和 varchar 在 equal to 运算符中不兼容
- 数据类型text 和varchar在 equal to运算符中不兼容
- 数据类型text 和varchar在 equal to运算符中不兼容
- c#程序对sql操作时报错数据类型 ntext 和 varchar 在 equal to 运算符中不兼容的问题
- LIS通讯接口(数据类型 text 和 varchar 在 equal to 运算符中不兼容)
- System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
- c#程序对sql操作时报错数据类型 ntext 和 varchar 在 equal to 运算符中不兼容的问题
- 数据类型 ntext 和 varchar 在 equal to 运算符中不兼容的问题
- 数据类型 text 和 varchar 在 add 运算符中不兼容
- System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。
- sql 错误信息:消息 402 数据类型 ntext 和 ntext 在 equal to 运算符中不兼容
- 数据类型 text 和 varchar 在 add 运算符中不兼容
- 异常详细信息: System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。
- 数据类型 ntext 和 varchar 在 equal to 运算符中不兼容的错误信息
- 未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。
- SQLServerException: 数据类型 time 和 datetime 在 less than or equal to 运算符中不兼容。
- asp.net中遇到这样的异常:System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止。