我正在使用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到实体,并且使用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"));
你可以试试:
SELECT * FROM #tmp WHERE cast(c1 as varbinary(510)) = cast(N'abc' as varbinary(510))
如果你有很多行,这将是非常慢的,但它的工作原理。