2014-12-22 5 views
3

오라클 정렬에서 대소 문자를 구분하는 것과 관련이 있습니다. 내가 본 솔루션의 대부분은 세션 매개 변수 아래에 설정을 언급합니다.오라클 정렬은 대소 문자를 구분하지 않습니까?

ALTER SESSION SET NLS_COMP = LINGUISTIC; 
ALTER SESSION SET NLS_SORT = BINARY_CI; 

기본적으로 NLS_COMP는 BINARY입니다.

NLS_COMP를 LINGUISTIC으로 설정하지 않고 NLS_SORT를 BINARY_CI로 설정하면 여전히 작동합니다. 즉, 오라클 정렬은 대소 문자를 구분하지 않습니다. NLS_COMP 매개 변수를 설정할 때 이점이 있습니까?

+0

예를 들어 민감한 검색을 원한다면 검색 필드에 위 또는 아래 기능을 사용합니다. 대문자와 소문자가 필요한 수백 가지 쿼리가없는 한 '% SEARCH_STRING %'와 같은 상위 (텍스트) 위치는 – thatjeffsmith

+0

입니다. insensitive sorting, 나는 lower (field) 또는 nlssort (field, 'nls_sort = binary_ci')로 정렬한다. 그렇지 않으면 코드 단순성을 위해 안전을 거래합니다. 대부분의 경우 nls 종속 코드는 사고가 발생하기를 기다리고 있습니다. 몇 년 안에 새로운 유지 보수 담당자 또는 새로운 소프트웨어가 자체 세션 매개 변수를 설정하고 쿼리가 자동으로 실패합니다. –

+0

대소 문자를 구분하지 않아도되는 많은 쿼리가 있습니다. 우리는 문자열로 정렬하는 경우 대소 문자를 구분해야합니다. – Zenil

답변

3

NLS_COMPNLS_SORT은 약간 다른 효과가 있습니다. NLS_COMP은 이름에서 알 수 있듯이 비교를 위해 사용됩니다. NLS_SORT은 이름에서 알 수 있듯이 정렬 용입니다. NLS_COMPLINGUISTIC으로 설정하면 비교 규칙에 따라 정렬 규칙이 적용되므로 비교 결과가 NLS_SORT 설정을 사용하게됩니다. NLS_COMP = BINARY

SELECT 1 FROM DUAL WHERE 'A' = 'a'; 

는 비교가 거짓 제공 : 당신이하려고하면 그 차이를 볼 수 있습니다. NLS_COMP = LINGUISTICNLS_SORT = BINARY_CI으로 비교하면 true가됩니다.

쿼리에서 원하는 결과에 따라 설정해야하는지 여부.

+1

좋은 지적입니다. 내가 읽은 대부분의 문서는이 구별을하지 않습니다. 대소 문자를 구분하지 않는 정렬은 두 매개 변수를 모두 설정해야한다고 믿으십시오. – Zenil