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일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 요즘은 개발은 주로 레일즈 사이트 수정하는 일을 하고, 예전에는 모바일 게임도 조금 만들어 봤습니다.

조회수 418


Banner slack 2x iegsyt

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