Этот запрос:
select *
from op.tag
where tag = 'fussball'
Возвращает результат со значением столбца тега "fußball". Столбец «tag» определяется как 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)
Я в замешательстве.