我正在使用SQL Server 2017,并且我的归类为SQL_LATIN1_GENERAL_CP1_CI_AS
,ANSI_PADDING
是默认值(ON
)。
在我的表中,其中一列的类型为NVARCHAR(255)
,并且其中一个值的插入方式如下(包括空格):
N'abc '
当我搜索没有空格(N'abc'
)时,我不想得到N'abc '
,但是找到了它。
我知道我可以在插入记录期间删除空格,但是不能更改已经插入的记录。
如何防止通过这种查询找到它?
CREATE TABLE #tmp (c1 nvarchar(255))
INSERT INTO #tmp
VALUES (N'abc ')
SELECT *
FROM #tmp
WHERE c1 = N'abc'
DROP TABLE #tmp
我也找到了这篇文章,但想在查询时避免。
Why the SQL Server ignore the empty space at the end automatically?
我在C#中使用Linq-to-entities,并且通过SQL查询,我可以使用'LIKE'关键字进行搜索,而无需使用百分比字符
SELECT *
FROM #tmp
WHERE c1 LIKE N'abc'
但是使用Linq,我不知道如何编写此查询:
entity.Temp.Where(p => p.c1 == "abc");
entity.Temp.Where(p => p.c1.Equals("abc"));
entity.Temp.Where(p => p.c1.Contains("abc"));
答案 0 :(得分:0)
您可以尝试:
SELECT * FROM #tmp WHERE cast(c1 as varbinary(510)) = cast(N'abc' as varbinary(510))
如果您有很多行,这将非常慢,但是它可以工作。