오라클에서의 한글 정렬
현재 사용하고 있는 케릭터 셋이 KO16MSWIN949일 때(조합형) 한글이 제대로 정렬되지 않는 문제가 있다.
이 경우 아래와 같이 함으로 써 해결 가능하다.
-- 한글이 제대로 정렬되어 나오지 않는다. select ch from ( select chr(ascii('가')+level-1) ch from dual connect by level <= ascii('힝')-ascii('가')+1 ) -- where rownum < 101 order by ch ; -- 자음은 제대로 정렬됨 select ch from ( select chr(ascii('ㄱ')+level-1) ch from dual connect by level <= ascii('ㅎ')-ascii('ㄱ')+1 ) -- where rownum < 101 order by ch ; -- 모음도 제대로 정렬됨 select ch, ascii_code from ( select chr(ascii('ㅏ')+level-1) ch , ascii('ㅏ')+level-1 ascii_code from dual connect by level <= ascii('ㅣ')-ascii('ㅏ')+1 ) -- where rownum < 101 order by ch ; -- 현재 NLS_SORT 확인 show parameter nls_sort; -- 정렬순서를 KO16KSC5601(완성형) 코드 순서대로 하겠다는 의미, -- 한글이 한자보다 먼저 나오고, 한자는 발음순서로 정렬된다. alter session set nls_sort = 'KOREAN_M'; -- 이번엔 한글이 제대로 정렬되어 나온다. select ch from ( select chr(ascii('가')+level-1) ch from dual connect by level <= ascii('힝')-ascii('가')+1 ) -- where rownum < 101 order by ch ; -- 이런방식을 사용해서도 가능하다. select ch from ( select chr(ascii('가')+level-1) ch from dual connect by level <= ascii('힝')-ascii('가')+1 ) -- where rownum < 101 order by NLSSORT(ch, 'NLS_SORT=KOREAN_M') ; -- 유니코드 방식으로 정렬한다. 한자가 한글보다 먼저 나오며, 한자는 바이트 정렬되어 나온다 -- 한글은 제대로 정렬되어 나온다. select ch from ( select chr(ascii('가')+level-1) ch from dual connect by level <= ascii('힝')-ascii('가')+1 ) -- where rownum < 101 order by NLSSORT(ch, 'NLS_SORT=UNICODE_BINARY') ; -- 한글의 비교연산자 시 한글이 제대로 연산되지 않는다. select ch from ( select chr(ascii('가')+level-1) ch from dual connect by level <= ascii('힝')-ascii('가')+1 ) where ch between '가' and '나' order by NLSSORT(ch, 'NLS_SORT=UNICODE_BINARY') ; -- 현재 비교 연산자의 파라미터값이 뭔지 확인한다. -- BINARY( 기본값 ), ANSI show parameter nls_comp -- 파라미터 값을 ANSI 로 변경하고 비교연산을 하면 이번에는 제대로 연산된다. alter session set nls_comp=ANSI; select ch from ( select chr(ascii('가')+level-1) ch from dual connect by level <= ascii('힝')-ascii('가')+1 ) where ch between '가' and '나' order by NLSSORT(ch, 'NLS_SORT=UNICODE_BINARY') ;
참고 사이트 :
http://www.dbguide.net/knowledge.db?cmd=view&boardUid=127008&boardConfigUid=20&categoryUid=205
http://www.dbguide.net/knowledge.db?cmd=view&boardUid=127023&boardConfigUid=20&categoryUid=205
http://www.dbguide.net/knowledge.db?cmd=view&boardUid=127024&boardConfigUid=20&categoryUid=205
http://www.dbguide.net/knowledge.db?cmd=view&boardUid=127046&boardConfigUid=20&categoryUid=205
최신 댓글