В SQL Server 2017 (14.0.2)
Рассмотрим следующую таблицу:
CREATE TABLE expTest
(
someNumbers [NVARCHAR](10) NULL
)
И допустим, вы заполняете таблицу некоторыми значениями:
INSERT INTO expTest VALUES('²', '2')
Почему следующий SELECT возвращает обе строки?
SELECT *
FROM expTest
WHERE someNumbers = '2'
Разве nvarchar не следует понимать, что «²» — это юникод, а «2» — это отдельное значение? Как (без использования функции UNICODE()) определить эти данные как неэквивалентные?
Возможный дубликат SQL Server удаляет юникод в запросе на равенство
Например, вы не используете строки UNICODE, но проблема связана с используемой вами сортировкой.
Кажется, у вас есть синтаксическая ошибка в вашем операторе вставки. @christopher
@DaleBurrell SQL_Latin1_General_CP1_CI_AS


Здесь — это рабочий пример db<>. Это показывает следующее:
Я думаю, что показатель степени просто рассматривается как другой «регистр» числа, поэтому они считаются одинаковыми при сопоставлении без учета регистра.
Сравнение — это то, что вы ожидаете от сортировки с учетом регистра.
Какая у вас настройка сопоставления?