ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PostgreSQL collate 한글 컬럼 정렬
    Database 2023. 4. 4. 22:19

     

    한글 이름을 오름차순으로 조회하는 요구사항이 있었다.

    쿼리가 아닌 DBeaver 와 같은 SQL 클라이언트에서 편집기로 정렬했을 때는 기대한 바와 같았는데 쿼리 결과는 기댓값과 달랐다.

    여러 번 조회하고 규칙을 보니까 2글자의 이름이 먼저 뽑혔다.

    GCP의 SQL을 사용하고 있는데 먼저 default collate 를 조회해 봤다.

    SHOW lc_collate; 
    
    /* en_US.UTF8 */

     

    지금은 이름 컬럼의 정렬만 한국어로 정렬되면 돼서 이름 컬럼의 collate 를 변경해 보자.

     

    ex. 테이블명은 profile, 컬럼은 text 타입의 name

    ALTER TABLE profile ALTER COLUMN name SET DATA TYPE text COLLATE "ko_KR.utf8";

    이렇게 name 컬럼의 collate 를 변경하고 SQL 편집기 또는 psql 에서 `\d profile` 을 통해 컬럼의 collate 정보를 확인한 후 다시 쿼리를 실행하니 기대한 바와 같이 동작하였다.

     


    참고:

    1. lc_collate 의 네이밍 규칙 language_territory.codeset 

      ex. ko_KR.utf8

     

    2. collate 종류 조회

    select collname from pg_collation

    3. typeorm 을 사용하고 있어 synchronize 기능을 사용하였는데 collate 는 변경되지 않는다.

    // ...
    @Column({
      type: 'text',
      collation: 'ko_KR.utf8',
    })
    name?: string;

     

     


    나중에 비슷한 문제가 생기면 찾아올지도...

     

    정말로 다시 비슷한 문제가 생겨서 찾아왔다.

     

    23년 07월 22일 추가 작성:

    로컬에서 collation 변경할 때 collation 이 존재하지 않는다고 해서 잉 뭐지 했는데 

    GCP SQL 에서는 collation name 이 `ko_KR.utf8` 인데 정확한 네이밍은 `ko_KR.UTF-8`이 맞음.

     

    GCP SQL 에서 "ko_KR.UTF-8" 생성해서 사용하는걸로 했다.

    CREATE COLLATION "ko_KR.UTF-8" from "ko_KR.utf8"
    
    ALTER TABLE "artist_profile"
    ALTER COLUMN "name" TYPE text COLLATE "ko_KR.UTF-8"

     

     

    https://www.postgresql.org/docs/current/collation.html

     

    24.2. Collation Support

    24.2. Collation Support 24.2.1. Concepts 24.2.2. Managing Collations The collation feature allows specifying the sort order and character classification behavior of …

    www.postgresql.org

     

     

     

    'Database' 카테고리의 다른 글

    공동주택 공시가격 DB 저장하기  (2) 2024.02.15
    mysql whitespace to null  (0) 2024.02.14
    MySQL wait_timeout  (0) 2023.10.27
    PostgreSQL Index  (2) 2023.02.26
    JOIN  (0) 2020.07.28
킹수빈닷컴