System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

一、引起的源头

环境: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)都是存多少占多少。

时间: 2024-07-28 15:34:52

System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。的相关文章

查询数据库语句报错“数据类型 text 和 varchar 在 equal to 运算符中不兼容。&quot;

问题:查询数据库语句报错"数据类型 text 和 varchar 在 equal to 运算符中不兼容." 解决: select * from 表名称 where cast(查询的字段名称 as varchar(max)) ='查询的值'

如何解决:数据类型 ntext 和 varchar 在not equal to 运算符中不兼容

select * from hrmdepartmentdefined where zhbgly = '36' 会报错.显示 [Err]42000-sql server 数据类型 text和varchar 在equal to  运算符中不兼容. 正确的写法为: select * from hrmdepartmentdefined where convert(varcahr(1000),zhbgly) = '36'

System.Data.SqlClient.SqlException: 将截断字符串或二进制数据

问题: " System.Data.SqlClient.SqlException "类型的未经处理的异常在System.Data.dll中发生.其他信息:将截断字符串或二进制数据 这是在做机房收费系统基本数据设定这一模块时遇到的问题. 本来在代码的UI层用Try--Catch捕获到了异常,如下图: 但没遇到过这个问题的人,光看这个肯定也解决不了问题,于是我把Try--Catch注释掉,找到了抛异常的详细信息: 解决: 一看是 " System.Data.SqlClient.S

System.Data.SqlClient.SqlException.Number的所有错误值列表

在系统数据库(master或msdb或model)的架构(sys)的视图(messages)中: SELECT [message_id]      ,[language_id]      ,[severity]      ,[is_event_logged]      ,[text]  FROM [master].[sys].[messages] where  language_id ='2052'order by message_id 数据库版本:sqlserver 2008 r2 所有代码都

异常详细信息: System.Data.SqlClient.SqlException:用户 &#39;IIS APPPOOL\DefaultAppPool&#39; 登录失败解决办法

1.安全性---登录名---新建登录名 2.常规----搜索 3.添加SERVICE用户-- 4.服务器角色---勾上sysadmin: IIS中: 应用程序池---对应的程序池上右键---高级设置 进程模块---标识---选择NetworkService(与数据库中设置统一) 异常详细信息: System.Data.SqlClient.SqlException:用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法

SharePoint &quot;System.Data.SqlClient.SqlException (0x80131904): Parameter &#39;@someColumn&#39; was supplied multiple times.“

最近在处理SharePoint Office365的相关开发的时候发现了这样一个奇怪的现象: 无法通过API更新Editor field,只要已更新就会throw Exception,由于是Office365的Exception,无法单单从Exception中分析出问题原因,而且奇怪的是新创建的List也存在同样的问题. 试了半天也没找到解决办法,单单看field的SchemaXml也没发现什么比较特殊的地方. 无奈之下save了一个list template,上传到本地的SharePoint

SqlServer报错:System.Data.SqlClient.SqlException

在将Asp.Net MVC4项目部署到新机器上进行调试的时候,出现了如下错误: System.Data.SqlClient.SqlException 具体的内容如下: System.Data.SqlClient.SqlException:"在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: Named Pipes Provider, error: 40 -

System.Data.SqlClient.SqlException 超时时间已到

错误信息: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应. (错误详细信息等于 很可能由 IncludeExceptionDetailInFaults=true 创建的 Except

发生了 System.Data.SqlClient.SqlException HResult=0x80131904 Message=在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 -

刚刚一运行出现了这个错误,一看知道是数据库出问题了. 打开数据库,果然是这样. 标题: 连接到服务器 ------------------------------  无法连接到 ..  ------------------------------ 其他信息: 未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. 解决方法: 是没有连上实例~先点取消,在"查看"中选"已注册的服务器",展开"数据库引擎"