Câu trả lời:
Có thể được thực hiện thông qua việc thay đổi Collation . Theo mặc định, nó là trường hợp không nhạy cảm.
Trích từ liên kết:
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ß
so với:/schwarz-weiss
Bằng cách sử dụng đối chiếu hoặc chuyển sang nhị phân, như thế này:
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
Sự trùng lặp của tên người dùng / mật khẩu tồn tại để cung cấp cho công cụ khả năng sử dụng các chỉ mục. Đối chiếu ở trên là đối chiếu phân biệt chữ hoa chữ thường, thay đổi thành đối chiếu bạn cần nếu cần.
Việc thứ hai, chuyển sang nhị phân, có thể được thực hiện như thế này:
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*"
tìm kiếm SQL thông thường sẽ được chèn vào.
Bạn có thể thực hiện truy vấn bằng cách chuyển đổi sang varbinary - rất dễ dàng. Thí dụ:
Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD')
SỬ DỤNG BINary_CHECKSUM
SELECT
FROM Users
WHERE
BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username)
AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
sử dụng 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
... trong mệnh đề 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
hoặc để tìm một giá trị
declare @value_b nvarchar(1) = 'A'
select ValueB + ' = ' + @value_b
from @example
where hashbytes('SHA1', ValueB) = hasbytes('SHA1', @value_b)
-- output:
-- A = A
Trong MySQL nếu bạn không muốn thay đổi đối chiếu và muốn thực hiện tìm kiếm phân biệt chữ hoa chữ thường thì chỉ cần sử dụng từ khóa nhị phân như thế này:
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
Giống như những người khác nói, bạn có thể thực hiện tìm kiếm phân biệt chữ hoa chữ thường. Hoặc chỉ thay đổi định dạng đối chiếu của một cột được chỉ định như tôi. Đối với các cột Người dùng / Mật khẩu trong cơ sở dữ liệu của tôi, tôi thay đổi chúng thành đối chiếu thông qua lệnh sau:
ALTER TABLE `UserAuthentication` CHANGE `Password` `Password` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL;