Sql is strictly equal, is there something?

Possible duplicate:
SQL server ignores case in where clause

Basically I need to check something like this

select * from users where name = @name, pass = @pass

the problem is 'pass' = 'pAsS'

there is something more stringent for comparing strings in sql (ms sql-server)

+5
source share
6 answers

It depends on your mapping, which would seem to be case insensitive. For example, standard sorting Latin1_General_CI_AS, which CImeans case insensitive. You can force another combination for another comparison:

select  *
from    users
where   name = @name
and     pass COLLATE Latin1_General_CS_AS = @pass COLLATE Latin1_General_CS_AS

By the way, you should not store passwords in your database - you should salt and hash them.

+7
source

, "pass" . , VARBINARY :

SELECT * FROM users 
WHERE name = @name
AND pass = @pass
AND CAST(pass AS VARBINARY(50)) = CAST(@pass AS VARBINARY(50))

, pass = @pass. , SQL Server pass.

+3

, :

SELECT * FROM users 
WHERE name = @name, pass = @pass
COLLATE  SQL_Latin1_General_Cp1_CS_AS

. .

+1

.

:

select * from users where name = @name, pass = @pass COLLATE SQL_Latin1_General_CP1_CS_AS

SQL Server

+1

For case sensitivity, you need to specify sorting in the request. Sort of:

select * from users where name = @name, pass = @pass COLLATE SQL_Latin1_General_Cp1_CS_AS
+1
source

Use binary sorting to ensure exact match.

WHERE pass = @pass COLLATE Latin1_General_BIN
+1
source

All Articles