Background
Last week our senior told us to select records from database starts with 'r' (small R). it troubles a lot, but we got solution finally.
Many applications have a functional requirement for the located database to have a case-sensitive search or sort-order, that character data related operations are case-sensitive.
may be there are some situation where you need to find case sensitive records from database.
How to do that ?
To achive this task we need to take help of SQL Collation.
What is SQL Collation ?
MSDN Says:
"Is a clause that can be applied to a database definition or a column definition to define the collation, or to a character string expression to apply a collation cast."
A collation encodes the rules governing the proper use of characters for either a language, such as Greek or Polish, or an alphabet such as Latin1_General (the Latin alphabet used by western European languages).
In simple words we bring together all rules and applied it on table or column defination. default collation is for SQL is Latin.
Get into action
suppose i have a table named 'users' contains 4 records.
1. responsive
2. Responsive
3. RESPONSIVE
4. ResPONsive
If we fire following Query,
"select * from users where name = 'responsive'
"
it will return us all columns. Cause, all column contains same data and record search is not case Sensitive.
following image clear idea,
![select.GIF](/KB/database/Case_sensitive_search/select.GIF)
To fetch case sensitive records you need to change collation of that column.
Change column collation
Default Collation of the SQL Server installation SQL_Latin1_General_CP1_CI_AS and this is not case sensitive. here is syntax to change column collation.
SELECT Column1 FROM Table1 WHERE Column1 = 'expression'
here we go
![collate.GIF](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Yes. we gor exact result.
by above method, we change column collate for temporary use. but we can change it's collate permanently. by using following Query
ALTER TABLE Table1 ALTER COLUMN Column1 VARCHAR(20) COLLATE Latin1_General_CS_AS
To know the collation of the column for any table run following Stored Procedure
EXEC sp_help tableName
here is the result
![StoredProcedure.GIF](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Thanks
This simple and short article gives you a suggestion "How to do casesensitive search in database",
Suggestion are most welcome.