#문제상황
우선
지금은 제대로 정렬 되어 있지만
이상하게 서버에 올려서 이름순 정렬을 하면 제대로 되지 않는 문제가 있었습니다.
서버는 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/
https://uiandwe.tistory.com/1380
'[냠톨릭-가톨릭대주변음식점] > 트러블 슈팅' 카테고리의 다른 글
Spring Security, Thymeleaf 및 세션 관리 이슈 해결 방법 (타임리프 로그아웃 후 동일 페이지 접근시 HTML 누락,일부 렌더링 문제) (0) | 2024.08.28 |
---|