这个查询:
select *
from op.tag
where tag = 'fussball'
返回一个标签列值为“fußball”的结果。列“标签”定义为 nvarchar(150)。
虽然我知道它们在语法上是相似的词,但任何人都可以解释和捍卫这种行为吗?我认为它与允许您更改列/表的区分大小写的相同排序规则设置有关,但谁会想要这种行为?当另一个值由于违反约束而存在时,列上的唯一约束也会导致插入一个值失败。我该如何关闭它?
后续加分问题。解释为什么这个查询不返回任何行:
select 1
where 'fußball' = 'fussball'
奖励问题(答案?):@ScottCher 私下向我指出,这是由于字符串文字“fussball”被视为 varchar。此查询确实返回结果:
select 1
where 'fußball' = cast('fussball' as nvarchar)
但是话又说回来,这个没有:
select 1
where cast('fußball' as varchar) = cast('fussball' as varchar)
我很困惑。