티스토리 뷰

 

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

쿼리가 아닌 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' 카테고리의 다른 글

MySQL wait_timeout  (0) 2023.10.27
PostgreSQL Index  (2) 2023.02.26
JOIN  (0) 2020.07.28