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