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

 


 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM