我有这个疑问:SQL Server在查询时是否自动修剪nvarchar字段?
select '[' + p.Firstname + ']' from Person p
where p.Firstname = 'Johanne'
在该表中,我有多个personne谁拥有这个名字,和一些对价值尾随空间(价值的不良插入,它会被纠正)。
那么为什么这个查询给我带来这样的结果(我插在括号中以可视化的空间):
[Johanne]
[Johanne ]
[Johanne ]
[Johanne]
这是一个配置的事情吗?真正的查询来自实体框架6,但这个例子也是如此。我怎样才能防止它?
谢谢!
编辑:我可以使它工作使用EF6和System.Data.Entity.SqlServer.SqlFunctions.DataLength
方法是这样的:
ctx.Person.FirstOrDefault(p => p.FirstName == "Johanne" && SqlFunctions.DataLength(p.FirstName) == "Johanne".Length);
我注意到,如果我在where子句中的值是“Johanne”(最后有一个空格),我仍然会得到相同的结果。 – Shimrod 2015-02-23 20:19:50
正确,但在默认情况下,在Sql Server中,如果你有一个前导空间,那么它将不会匹配ie。 '约翰'不会在你的where子句中返回任何结果。 – Igor 2015-02-23 20:23:02
如果您在此处使用'N'字符串,它会起作用吗? 'p.Firstname = N'Johanne''? 'N'告诉它使用Unicode,它将匹配列的类型。 – 2015-02-23 20:24:15