본문 바로가기

개발/DB

[DataBase] Postgresql 한글 정렬

반응형

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) 기반의 언어 태그로, 여기서 각 부분의 의미는 다음과 같다.

  1. und: "undefined" 또는 "unknown"의 약어로, 특정한 언어가 지정되지 않았음을 나타낸다. 즉, 특정 언어가 아닌 일반적인 정렬 규칙을 사용할 때 사용된다.
  2. x: 이 부분은 ICU에서 확장 기능을 나타냅니다. x는 특별한 태그 또는 메타데이터를 의미하며, 일반적으로 추가적인 속성이나 정렬 규칙이 없음을 나타낸다.
  3. 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