Фильтрация столбца Unicode в Sql server 2005 - для большого совпадения данных - PullRequest
3 голосов
/ 16 сентября 2010

У меня есть простая таблица:

CREATE TABLE [dbo].[Users]([Surname] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL) ON [PRIMARY]

с двумя рядами:

Paweł
Pawel

Выдача следующего оператора выбора:

SELECT *, CAST(Surname AS VARBINARY(30)) AS Expr1, CAST(N'Paweł' AS VARBINARY(30)) AS Expr1 
FROM Users WHERE Surname = N'Paweł'

дает следующий результат:

Paweł   0x50006100770065004201  0x50006100770065004201
Pawel   0x50006100770065006C00  0x50006100770065004201

Возвращается строка со значением 'Pawel', даже если она не равна 'Paweł' (двоичные столбцы показывают это).

Есть идеи, что происходит, почему SQL-сервер считает Pawel = Paweł в этом случае?

Спасибо, Павел

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

«ИИ» в вашем сопоставлении означает «нечувствительный к акценту». Чтобы различать эти два параметра, вместо «Accent Sensitive» следует использовать «AS»: Latin1_General_CI_AS

3 голосов
/ 16 сентября 2010

Ваше сопоставление нечувствительно к акценту: Latin1_General_CI_AI

Попробуйте что-то вроде этого:

select 1 where N'Pawel' = N'Paweł' collate Latin1_General_100_CI_AS

Ничего не возвращает, как ожидалось.

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