Чувствительная к регистру запись в SQL Server - PullRequest
0 голосов
/ 26 февраля 2019

Я использую SQL Server 2012. Сортировка базы данных - «CI» (без учета регистра).При выборе из aspnet_users имена пользователей учитывают регистр, как и предполагалось.Но некоторые отдельные записи в таблице по-прежнему чувствительны к регистру, и я не понимаю, почему.

Пример. У меня есть запись с именем пользователя "MariaA".

Этот оператор выбора возвращает правильную запись:

SELECT [UserName] FROM [aspnet_Users] where UserName = 'MariaA'

Этот оператор выбора также возвращает правильную запись:

SELECT [UserName] FROM [aspnet_Users] where UserName = 'mariaA'

если я выполню этот оператор, пользователь будетНЕ возвращено:

SELECT [UserName] FROM [aspnet_Users] where UserName = 'Mariaa'

если я выполню этот оператор, пользователь НЕ вернется:

SELECT [UserName] FROM [aspnet_Users] where UserName = 'mariaa'

Вопрос: Похоже, что символ верхнего регистра 'A' чувствителен к регистру.Все остальные символы могут быть нечувствительными к регистру.Эта проблема также возникает с другими пользовательскими профилями, когда имя пользователя содержит прописные буквы «А», оно не может быть записано строчными буквами «а».

Почему это происходит и как это можно решить?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

В датском сопоставлении aa - это один символ, в то время как aA интерпретируется как два символа (независимо от чувствительности к регистру).

Если это целесообразно, вы можете выполнить сравнение вверхний регистр:

WITH cte AS
(

    select 'MariaA' as username 
) 

SELECT * from cte where UPPER(username)=UPPER('Mariaa') COLLATE Danish_Norwegian_CI_AS
0 голосов
/ 26 февраля 2019

используйте COLLATE SQL_Latin1_General_CP1_CS_AS в выражении where

WITH cte AS
(

    select 'MariaA' as username
) select * from cte where username='mariaA' COLLATE SQL_Latin1_General_CP1_CS_AS

По умолчанию регистр не учитывается

, поэтому приведенный ниже запрос вернет строку, в которой он будет соответствовать

WITH cte AS
(

    select 'MariaA' as username
) select * from cte where username='MariaA' COLLATE SQL_Latin1_General_CP1_CS_AS
...