SQL Server запрашивает чувствительность к регистру
У меня есть эта база данных:
abcDEF
ABCdef
abcdef
если я пишу: select * from MyTbl where A='ABCdef'
как получить: ABCdef
и как получить:
abcDEF
ABCdef
abcdef
Заранее спасибо
забыл написать - sqlCE
Ответ 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?
Ответ 3
Все о сортировке. Каждый из них имеет суффикс (CI и CS, что означает нечувствительность к регистру и чувствительность к регистру).
SQL по умолчанию не чувствителен к регистру, поэтому при выполнении простого сравнения строк вы получите все три элемента. Чтобы сделать его чувствительным к регистру, вы можете указать значение поля и значение вашего поиска как varbinary:
SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))
Вышеприведенное предполагает, что ваше поле varchar имеет размер 20. Для nvarchar double it (спасибо @ps2goat).
Ответ 5
Попробуйте просто добавить бинарное ключевое слово после where: