Этот запрос:Unicode символы, вызывающие проблемы в SQL Server 2005 строки сравнения
select *
from op.tag
where tag = 'fussball'
Возвращает результат, который имеет значение тега столбца «Fußball». Столбец «тег» определяется как nvarchar (150).
Хотя я понимаю, что они similar words grammatically, может ли кто-нибудь объяснить и защитить это поведение? Я полагаю, что это связано с теми же настройками сортировки, которые позволяют вам изменять чувствительность к регистру на столбце/таблице, но кто хотел бы этого поведения? Уникальное ограничение на столбец также приводит к сбою при вставках одного значения, когда другое существует из-за нарушения ограничения. Как отключить это?
Последующий вопрос о бонусной точке. Объясните, почему этот запрос не возвращает ни одной строки:
select 1
where 'fußball' = 'fussball'
Bonus вопрос (ответ): @ScottCher указал мне в частном порядке, что это связано с строковый литерал «Fußball», которое лечат, как VARCHAR. Этот запрос ДЕЛАЕТ возвращает результат:
select 1
where 'fußball' = cast('fussball' as nvarchar)
Но опять же, это один не делает:
select 1
where cast('fußball' as varchar) = cast('fussball' as varchar)
Я запутался.
Какое сравнение вы используете на своем SQL Server? Какие языки и языковые настройки вы используете? –
@marc_s все по умолчанию установка в США. Я думаю, что это Latin1_General_CS_AS? – TheSoftwareJedi
Значение по умолчанию для @marc_s по умолчанию равно SQL_Latin1_General_CP1_CI_AS. Возможно, этот сервер был обновлен с Sql Server 2000. Тем не менее, все еще запутано это поведение! – TheSoftwareJedi