PostgreSQL에서 한글 데이터를 ORDER BY로 정렬하면 순서가 이상합니다.
SELECT name FROM users ORDER BY name ASC;
-- 결과:
-- 가나다 (O)
-- 마바사 (O)
-- 아자차 (O)
-- ㄱㄴㄷ (??)
-- 하하하 (??)
가나다순으로 제대로 정렬되지 않고, 일부 글자가 뒤죽박죽입니다. 데이터베이스 생성 시 locale 설정을 따로 안 했는데 이게 원인일까요? 이미 데이터가 많이 들어있어서 DB를 다시 만들기는 어렵습니다.
댓글 2
맞습니다! locale 설정이 원인입니다. PostgreSQL의 기본 collation이 C나 POSIX로 되어있으면 한글이 제대로 정렬되지 않아요.
현재 설정 확인:
DB를 다시 만들지 않는 해결법:
쿼리에서 COLLATE를 지정하면 됩니다:
또는 컬럼 자체의 기본 collation을 변경할 수도 있습니다:
서버에 ko_KR.utf8 locale이 설치되어 있어야 합니다.
locale -a | grep ko로 확인해보세요.