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

조회수 3539회

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를 설정할 때 잘못한 걸까요?

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한 데이터를 새 데이터베이스에 로딩하세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)