zoukankan      html  css  js  c++  java
  • 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 的取值范围为 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)都是存多少占多少。


     

     

  • 相关阅读:
    深浅拷贝的区别
    python 连接mysql数据库
    前端 之HTML基础
    MySQL 多键
    MySQL 存储引擎 字段类型 约束条件
    MySQL数据库的基础知识
    全局解释器和协程
    进程剩余部分和线程
    计算机网络体系结构整理-第三单元网络交换
    计算机网络体系结构整理-第二单元IP技术
  • 原文地址:https://www.cnblogs.com/xcsn/p/6852082.html
Copyright © 2011-2022 走看看