回答:
照合順序を変更することで実行できます。デフォルトでは、大文字と小文字は区別されません。
リンクからの抜粋:
SELECT 1
FROM dbo.Customers
WHERE CustID = @CustID COLLATE SQL_Latin1_General_CP1_CS_AS
AND CustPassword = @CustPassword COLLATE SQL_Latin1_General_CP1_CS_AS
/schwarz-weiß/schwarz-weiss
照合を使用するか、次のようにバイナリにキャストします。
SELECT *
FROM Users
WHERE
Username = @Username COLLATE SQL_Latin1_General_CP1_CS_AS
AND Password = @Password COLLATE SQL_Latin1_General_CP1_CS_AS
AND Username = @Username
AND Password = @Password
ユーザー名/パスワードの重複は、インデックスを使用する可能性をエンジンに与えるために存在します。上記の照合順序は大文字と小文字を区別する照合順序です。必要に応じて、必要な照合順序に変更してください。
2番目の方法は、バイナリへのキャストで、次のように実行できます。
SELECT *
FROM Users
WHERE
CAST(Username as varbinary(100)) = CAST(@Username as varbinary))
AND CAST(Password as varbinary(100)) = CAST(@Password as varbinary(100))
AND Username = @Username
AND Password = @Password
like "*word or phrase*"SQL検索と同様の語句が挿入される場所の説明が含まれている場合に最適です。
varbinaryへの変換を使用してクエリを作成できます。これは非常に簡単です。例:
Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD')
BINARY_CHECKSUMを使用
SELECT
FROM Users
WHERE
BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username)
AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
HASHBYTESを使用する
declare @first_value nvarchar(1) = 'a'
declare @second_value navarchar(1) = 'A'
if HASHBYTES('SHA1',@first_value) = HASHBYTES('SHA1',@second_value) begin
print 'equal'
end else begin
print 'not equal'
end
-- output:
-- not equal
... where句内
declare @example table (ValueA nvarchar(1), ValueB nvarchar(1))
insert into @example (ValueA, ValueB)
values ('a', 'A'),
('a', 'a'),
('a', 'b')
select ValueA + ' = ' + ValueB
from @example
where hashbytes('SHA1', ValueA) = hashbytes('SHA1', ValueB)
-- output:
-- a = a
select ValueA + ' <> ' + ValueB
from @example
where hashbytes('SHA1', ValueA) <> hashbytes('SHA1', ValueB)
-- output:
-- a <> A
-- a <> b
または値を見つける
declare @value_b nvarchar(1) = 'A'
select ValueB + ' = ' + @value_b
from @example
where hashbytes('SHA1', ValueB) = hasbytes('SHA1', @value_b)
-- output:
-- A = A
MySQLでは、照合順序を変更せず、大文字と小文字を区別したい場合は、次のようにバイナリキーワードを使用します。
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
他の人が言ったように、大文字と小文字を区別した検索を実行できます。または、指定した列の照合形式を自分のように変更するだけです。データベースのユーザー/パスワード列について、次のコマンドを使用して照合に変更します。
ALTER TABLE `UserAuthentication` CHANGE `Password` `Password` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL;