반응형
PostgreSQL의 한글데이터가 들어있는 컬럼을 기준으로 정렬조건을 지정했을때 가나다 순으로 나오지 않을 수 있다.
PostgreSQL에서는 ICU(International Components for Unicode)를 사용하여 더 세밀한 정렬을 지원하고.
다음과 같은 방법을 통해 COLLATE 설정을 사용할 수 있다.
먼저 내가 사용할 수 있는 COLLATE 설정을 조회하기 위해 아래 명령어를 입력해보자
SELECT * FROM pg_collation WHERE collname LIKE 'ko%';
"ko-KR-x-icu" 나 "ko-x-icu" 설정으로 collate 설정을 잡아주면 가나다 순으로 조회되는것을 확인할 수 있다.
select * from table_name
order by column_name collate "ko-x-icu";
쿼리로는 해결할 수 없을때 테이블 특정 컬럼에 대한 COLLATE 설정을 잡아줄 수 있다.
이후 column_name 으로 정렬하면 가나다 순으로 조회된다.
그럼 해당 컬럼에 영어,한국어,일본어 등 여러 언어들이 저장되어 다국어 정렬지원을 해야한다면?
"und-x-icu"
und-x-icu는 ICU(International Components for Unicode) 기반의 언어 태그로, 여기서 각 부분의 의미는 다음과 같다.
- und: "undefined" 또는 "unknown"의 약어로, 특정한 언어가 지정되지 않았음을 나타낸다. 즉, 특정 언어가 아닌 일반적인 정렬 규칙을 사용할 때 사용된다.
- x: 이 부분은 ICU에서 확장 기능을 나타냅니다. x는 특별한 태그 또는 메타데이터를 의미하며, 일반적으로 추가적인 속성이나 정렬 규칙이 없음을 나타낸다.
- icu: ICU는 문자열 비교, 정렬, 날짜 및 숫자 형식화 등 다양한 국제화 기능을 제공하는 라이브러리이다. icu는 ICU의 기능을 사용하여 문자열 정렬 및 비교를 수행할 수 있도록 된다.
select * from table_name
order by column_name collate "und-x-icu";
ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE character varying(256) COLLATE "und-x-icu";
정상적으로 정렬되는것을 확인할 수 있을것이다.
반응형
'개발 > DB' 카테고리의 다른 글
[Postgresql] spring boot datasource 설정 시 application name 지정 (1) | 2024.11.12 |
---|---|
[DB] Index(인덱스) 란? (0) | 2024.01.08 |