#문제상황

 

우선 

지금은 제대로 정렬 되어 있지만 

이상하게 서버에 올려서 이름순 정렬을 하면 제대로 되지 않는 문제가 있었습니다.

 

서버는 PostgreSql 로컬은 H2를 사용해서 돌아가게 되어있습니다.

 

#해결방법

 

PostgreSQL을 사용하여 데이터를 정렬할 때, 한글이 포함된 컬럼의 정렬이 예상과 다르게 동작하는 경우가 발생할 수 있습니다. 예를 들어, ORDER BY 구문을 사용하여 한글이 포함된 컬럼을 정렬할 때, 한글이 정상적으로 "가나다" 순으로 정렬되지 않고 엉뚱한 순서로 나오는 상황을 겪을 수 있습니다.

이 문제의 원인은 데이터베이스가 한글 정렬에 적합한 collation 설정을 사용하지 않았기 때문입니다.

Collation이란?

Collation은 데이터베이스에서 문자열을 비교하고 정렬할 때 사용하는 규칙을 정의하는 설정입니다. PostgreSQL에서는 데이터베이스를 생성할 때 collation 설정을 지정할 수 있습니다. 기본적으로 en_US.UTF-8과 같은 영어 기반의 collation이 설정되어 있는 경우, 한글 정렬이 제대로 되지 않는 문제가 발생할 수 있습니다.

문제 원인 분석

PostgreSQL에서 데이터베이스의 collation이 한글 정렬에 적합하지 않은 값으로 설정된 경우, 한글이 올바르게 정렬되지 않습니다. 예를 들어, en_US.UTF-8로 설정된 데이터베이스는 한글을 영어 알파벳과 동일한 기준으로 정렬하기 때문에, 우리가 기대하는 "가나다" 순으로 정렬되지 않습니다.

이 문제를 해결하려면 데이터베이스를 생성할 때 올바른 collation을 설정해야 합니다.

해결 방법

 

1. 데이터베이스 생성 시 collation 설정하기

PgAdmin에서 생성시 Character type 을 C로 해준다

 

또는

 

데이터베이스를 처음 생성할 때 collation을 ko_KR.UTF-8로 설정하면 한글이 올바르게 정렬됩니다. 이 방법은 데이터베이스를 처음부터 설정하는 경우에 적합합니다.

CREATE DATABASE mydb
WITH ENCODING='UTF8'
LC_COLLATE='ko_KR.UTF-8'
LC_CTYPE='ko_KR.UTF-8'
TEMPLATE=template0;​

2. 이미 생성된 데이터베이스에서 collation 변경하기

이미 데이터베이스가 생성된 후에는 collation을 변경하기가 어렵습니다. 이 경우, 데이터베이스를 백업하고 새로운 collation 설정으로 데이터베이스를 다시 생성해야 합니다.

UPDATE PG_DATABASE SET DATCOLLATE = 'ko_KR.utf8',
WHERE DATNAME='[데이터베이스명]';

3. 쿼리 수준에서 collate 옵션 사용하기

만약 데이터베이스 전체를 재설정할 수 없는 상황이라면, 개별 쿼리에서 collate 옵션을 사용하는 방법도 있습니다. 이 방법은 쿼리마다 collation을 지정하여 한글이 올바르게 정렬되도록 합니다.

SELECT * FROM store
ORDER BY store_nm COLLATE "ko_KR.utf8";​

이 방법을 사용하면, 데이터베이스의 기본 collation을 변경하지 않고도 한글 정렬 문제를 해결할 수 있습니다.

 

 

 

참고 

https://jupiny.com/2016/12/12/sort-korean-in-postgresql/

 

PostgreSQL 한글 정렬 문제 해결하기

예전에 안수찬 강사님이 페이스북 PostgreSQL Korea 그룹에 한글 정렬 문제로 질문을 올리신 걸 본 적이 있었다. 그때만 해도 그냥 남의 일로 느껴져 별로 주의깊게 보지 않았었는데, 현재 Django로 웹

jupiny.com

https://gaagaagaa.tistory.com/entry/PostgreSQL-%ED%95%9C%EA%B8%80-%EC%A0%95%EB%A0%AC%EC%9D%B4-%EC%95%88%EB%90%A0-%EB%95%8Ccollate

 

[PostgreSQL] 한글 정렬이 안될 때(collate)

● 문제  - ORDER BY를 이용하여 정렬하려고 하는데, 한글 정렬이 이상함  - 예시) SELECT [컬럼명]FROM [테이블명]ORDER BY [컬럼명]; ● 원인  - 아래의 쿼리를 실행하면 시스템 카탈로그 테이블(PG_DATAB

gaagaagaa.tistory.com

https://uiandwe.tistory.com/1380

 

postgresql 한글 order by의 기준

select * from store order by store_nm; sql로 분명히 한글 정렬했는데, 이상하게 정렬이 되어버렸다. 보는 바와 같이 위쪽은 가나다순으로 잘 나오다가 자릿수가 더 많은 stirng에서 다시 내림차순으로 정렬

uiandwe.tistory.com

 

+ Recent posts