Подтвердить что ты не робот

SQL Server запрашивает чувствительность к регистру

У меня есть эта база данных:

abcDEF

ABCdef

abcdef

если я пишу: select * from MyTbl where A='ABCdef'

как получить: ABCdef

и как получить:

abcDEF

    ABCdef

    abcdef

Заранее спасибо

забыл написать - sqlCE

4b9b3361

Ответ 1

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

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef'

Ответ 2

Если у вас есть abcDEF, ABCdef, abcdef уже в базе данных, тогда он уже чувствителен к регистру или у вас нет ограничений.

Вам нужно будет добавить COLLATE с обеих сторон, чтобы убедиться, что он действительно чувствителен к регистру (для нечувствительной к регистру базы данных), которая приведет к недействительности использования индекса

SELECT TheColumn
FROM MyTable 
WHERE TheColumn COLLATE Latin1_General_CS_AS = 'ABCdef' COLLATE Latin1_General_CS_AS

А как насчет акцентов? Latin1_General_CS_AI, Latin1_General_Bin?

Ответ 4

SQL по умолчанию не чувствителен к регистру, поэтому при выполнении простого сравнения строк вы получите все три элемента. Чтобы сделать его чувствительным к регистру, вы можете указать значение поля и значение вашего поиска как varbinary:

SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))

Вышеприведенное предполагает, что ваше поле varchar имеет размер 20. Для nvarchar double it (спасибо @ps2goat).

Ответ 5

Попробуйте просто добавить бинарное ключевое слово после where:

select * from MyTbl where binary A = 'ABCdef';