이 문제는 악센트를 구분하지 않는 데이터 정렬을 사용하여 해결할 수 있습니다 .
데이터베이스는 아마도 AS (Accent Sensitive) 데이터 정렬을 사용하고 있으므로 기본적으로 악센트를 포함하여 정확히 일치하는 항목을 검색합니다.
비교와 함께 데이터 정렬을 지정하여 WHERE 절에 데이터베이스 기본값 이외의 다른 데이터 정렬을 사용하도록 지시 할 수 있습니다.
에서 이 dbfiddle 나는 LATIN1 정렬을 사용하는 예제를 생성하지만 당신은 당신이 당신의 열이 현재 사용중인 데이터 정렬을 위해 AI에 AS를 변경하여 사용하는 데이터 정렬과 같은 방법을 사용할 수 있습니다.
열이 사용중인 데이터 정렬과 일치하는 악센트 비 감응 데이터 정렬을 사용하십시오. 예를 들어, 컬럼을 사용 하는 경우 비 SQL_ 데이터 정렬의 동작이 악센트 비 감도보다 더 많은 방식이 다르므로 사용자가 예상하지 못할 수 있으므로이 둘의 변형을 SQL_Latin1_General_CP1_CI_AS
사용 하거나 사용 SQL_Latin1_General_CP1_CI_AI
하지 Latin1_General_CI_AS
않거나 사용 Latin1_General_100_CI_AS
하십시오.
에서 현재 데이터 정렬을 확인할 수 있습니다 sys.columns
.
CREATE TABLE testaccent (name nvarchar(50));
GO
INSERT INTO testaccent (name) VALUES ('Millière') , ('Milliere');
GO
-- returns Miliere
SELECT * FROM testaccent WHERE name = 'Milliere';
-- returns both
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AI
--only returns Miliere
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AS
자세한 정보는 SQL Server 데이터 정렬 사용을 읽으십시오 .
그런 다음 다시 당신은 아마 (로이 데이터 정렬을 사용하여 정렬 싶어 peufeu "E"와 그 "é"종류를 확인하기 위해 주석에서 언급). 그렇지 않으면 알파벳순으로 결과를 페이지 매김하는 사람은 예상 한 위치에 "é"가 없다는 사실에 놀라게 될 것입니다. 그러나이 쿼리를 터치하려는 경우에도 COLLATE
절을 추가 할 수 있습니다 ORDER BY
.
의견에서 Solomon Rutzky 가 언급했듯이 , 이것이 단지 하나 또는 몇 개의 열에 만 영향을 미치는 경우, 또 다른 옵션은 단순히 "이름"열을 반복하고 악센트에 둔감 한 데이터 정렬을 제공하고 계산 된 색인을 생성하는 비 지속 계산 열을 만드는 것입니다 기둥. 이렇게하면 쿼리 내에서 데이터 정렬을 변경하여 발생하는 스캔을 피할 수 있습니다. 그런 다음 쿼리는 새 열을 필터링해야합니다.
다음과 같은 것 :
ALTER TABLE
dbo.[table_name] ADD [SearchName] datatype_of_name_column
AS ([Name] COLLATE LATIN1_GENERAL_100_CI_AI));
CREATE INDEX [IX_table_name_SearchName]
ON dbo.[table_name] ([SearchName] ASC);
또는 jyao가 선호하는 대로 계산 열을 추가하는 대신보기를 만들 수도 있습니다 .