SQL Server убирает юникод в запросе equals - PullRequest
5 голосов
/ 01 апреля 2019

Может кто-нибудь объяснить, почему, когда я запускаю:

select * from (select N'someString?' as id)_id where _id.id = N'someString'

на сервере sql, я получаю результат someString?

Я не делаю подобное сравнение и не могу найти ничего вдокументация для объяснения этого поведения, мне нужно точное совпадение или мне нужны правила проверки на моем сервере, чтобы исключить любой символ, который ведет себя так.

БД использует параметры сортировки SQL_Latin1_General_CP1_CI_AS, если это имеет какое-либо влияние?

Ответы [ 2 ]

8 голосов
/ 01 апреля 2019

Похоже, что независимо от его положения, смайлики пу пропускаются.Например, ниже возвращается каждая строка:

SELECT *
FROM (VALUES(N'someString?'),
            (N'?someString'),
            (N'some?String'),
            (N'some?String?')) V(S)
WHERE S = N'someString';

Если вы используете двоичное сопоставление, этого не происходит:

SELECT *
FROM (VALUES(N'someString?'COLLATE SQL_Latin1_General_CP850_BIN),
            (N'?someString'COLLATE SQL_Latin1_General_CP850_BIN),
            (N'some?String'COLLATE SQL_Latin1_General_CP850_BIN),
            (N'some?String?'COLLATE SQL_Latin1_General_CP850_BIN)) V(S)
WHERE S = N'someString';

Если SQL Server имеет дело с этими символами Unicode / emojiважно, тогда двоичная сортировка, вероятно, будет вашим лучшим выбором.

6 голосов
/ 01 апреля 2019

Вы, вероятно, были на правильном пути. Сопоставление будет определять, как выполняется сравнение. Вот один из вариантов, который может помочь вам решить вашу проблему.

SELECT *
FROM (VALUES(N'someString?'),
            (N'?someString'),
            (N'some?String'),
            (N'some?String?'),
            (N'somestring')) V(S)
WHERE S = N'someString' COLLATE Latin1_General_100_CI_AI_KS_WS

Сортировка описывается как Latin1-General-100, case-insensitive, accent-insensitive, kanatype-sensitive, width-sensitive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...