본문 바로가기
Q&A해결2024년 7월 15일1분 읽기

PostgreSQL 한글 정렬이 이상합니다

D
DB입문
조회 492댓글 2

PostgreSQL에서 한글 데이터를 ORDER BY로 정렬하면 순서가 이상합니다.

SELECT name FROM users ORDER BY name ASC;

-- 결과:
-- 가나다  (O)
-- 마바사  (O)
-- 아자차  (O)
-- ㄱㄴㄷ  (??)
-- 하하하  (??)

가나다순으로 제대로 정렬되지 않고, 일부 글자가 뒤죽박죽입니다. 데이터베이스 생성 시 locale 설정을 따로 안 했는데 이게 원인일까요? 이미 데이터가 많이 들어있어서 DB를 다시 만들기는 어렵습니다.

댓글 2

김김영삼2년 전

맞습니다! locale 설정이 원인입니다. PostgreSQL의 기본 collation이 C나 POSIX로 되어있으면 한글이 제대로 정렬되지 않아요.


현재 설정 확인:


SELECT datname, datcollate, datctype 
FROM pg_database WHERE datname = current_database();

DB를 다시 만들지 않는 해결법:


쿼리에서 COLLATE를 지정하면 됩니다:


-- 한글 정렬이 올바르게 동작
SELECT name FROM users
ORDER BY name COLLATE "ko_KR.utf8" ASC;

또는 컬럼 자체의 기본 collation을 변경할 수도 있습니다:


ALTER TABLE users 
ALTER COLUMN name TYPE text
COLLATE "ko_KR.utf8";

서버에 ko_KR.utf8 locale이 설치되어 있어야 합니다. locale -a | grep ko로 확인해보세요.

DDB입문(guest)김영삼2년 전
COLLATE 지정하니까 바로 해결됐습니다! DB 안 날려도 돼서 정말 다행이에요. 감사합니다!
Ctrl+Enter로 등록