SQL 쿼리에서 대소 문자를 구분하여 검색하고 싶습니다. 그러나 기본적으로 SQL Server는 문자열의 경우를 고려하지 않습니다.
SQL 쿼리에서 대소 문자 구분 검색을 수행하는 방법에 대한 아이디어가 있습니까?
답변
데이터 정렬 을 변경하여 수행 할 수 있습니다 . 기본적으로 대소 문자를 구분합니다.
링크에서 발췌 :
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
답변
콜 레이션을 사용하거나 다음과 같이 바이너리로 캐스트합니다.
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
사용자 이름 / 암호가 중복되어 엔진에 색인을 사용할 수 있습니다. 위의 데이터 정렬은 대소 문자 구분 데이터 정렬입니다. 필요한 경우 필요한 데이터 정렬로 변경하십시오.
바이너리로 캐스팅하는 두 번째는 다음과 같이 수행 할 수 있습니다.
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
답변
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
… in 절
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
답변
SQL DB에서 Latin1_General_CS를 데이터 정렬로 사용하십시오.
답변
MySQL에서는 데이터 정렬을 변경하지 않고 대소 문자 구분 검색을 수행하려면 다음 과 같이 이진 키워드를 사용 하십시오.
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter