Postgresql에서 한글 순서대로 정렬이 안됩니다.


SELECT * FROM table_name ORDER BY title이라고 했는데 title 한글 순서대로 정렬이 안되고 자기 멋대로 정렬이 됩니다. 보다 먼저 나오기도 하고, 랜덤해 보입니다.

(1) SELECT * FROM table_name ORDER BY title collate "C"라고 하면 잘 되던데 collate "C"가 뭔가요?

(2) Mac에 설치한 postgresql에서는 collate "C"가 없어도 정렬이 잘 되고, 리눅스에 설치한 postgresql에서만 정렬이 안 되는 현상이 있습니다. DB를 설정할 때 잘못한 걸까요?

  • 2016년 08월 05일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

조회수 268


1 답변


좋아요
2
싫어요
채택취소하기

DEFAULT로 COLLATE가 C가 되도록 하려면, initdb 로 데이터베이스 생성 COLLATE를 지정해주면 될 것 같네요.

# initdb -E UTF-8 --lc-collate=C -W -D <위치>

혹은 LC_COLLATE=C 로 환경변수가 설정된 상태로 postgresql 서버가 동작하면 가능할 것 같네요. (이건 테스트를 해보지는 않아서 확실하지는 않습니다.)

변경하려면 기존의 데이터베이스를 다음과 같이 마이그레이션 해야하는 것도 고려해보세요.

  1. 데이터베이스를 DUMP하고,
  2. 새 데이터베이스를 위와 같이 lc-collate를 지정하여 생성한 후
  3. DUMP한 데이터를 새 데이터베이스에 로딩하세요.
  • 2016년 08월 05일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close