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

简介: 一、引起的源头 环境:vs2015,sqlserver2008 相关程序包:ef6 定义了一个实体article public class Article { public string Data{get;set;} } EntityTypeConfiguration的配置 Property(a => a.

一、引起的源头

环境: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 的取值范围为 18,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)都是存多少占多少。

 


 

 

 

相关文章
|
25天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
37 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
6月前
|
JavaScript 前端开发 索引
JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型
【6月更文挑战第25天】JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型,而Object包括Array、Function等是引用类型。Objects可以包含键值对,Array是特殊的Object。Functions也是对象。`null`和`undefined`被视为特殊的原始值。
57 1
|
5月前
|
开发者 Python
【Python】已解决:TypeError: a bytes-like object is required, not ‘int’
【Python】已解决:TypeError: a bytes-like object is required, not ‘int’
267 0
TS,数据类型概述,常见的基本数据类型有number/string/boolean/undefined/null,字符串用““,let food: string = ‘糖葫芦‘,布尔类型
TS,数据类型概述,常见的基本数据类型有number/string/boolean/undefined/null,字符串用““,let food: string = ‘糖葫芦‘,布尔类型
|
关系型数据库 MySQL C++
Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“
Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“
181 0
|
JSON 数据格式 Python
python编程:json indent can't multiply sequence by non-int of type 'str'
python编程:json indent can't multiply sequence by non-int of type 'str'
180 0
|
数据库
System.Data.SqlClient.SqlException: 将截断字符串或二进制数据
“ System.Data.SqlClient.SqlException ”类型的未经处理的异常在System.Data.dll中发生。其他信息:将截断字符串或二进制数据
System.Data.SqlClient.SqlException: 将截断字符串或二进制数据