티스토리 뷰
한글 이름을 오름차순으로 조회하는 요구사항이 있었다.
쿼리가 아닌 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
'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 |
- Total
- Today
- Yesterday
- dreamcoding
- 백준
- 백기선 스터디
- 드림코딩
- 이펙티브자바 아이템59
- REST API
- JS 딥다이브
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- js promise
- java
- Spring Security
- 김영한 http
- 이펙티브자바
- 이펙티브자바 아이템60
- HTTP 완벽 가이드
- 모던자바스크립트
- HTTP 완벽가이드
- js array
- ㅇㄷㅇㅈ
- GCP
- 프로그래머스 SQL
- 패스트캠퍼스 컴퓨터공학 완주반
- 이펙티브자바 스터디
- js api
- JPA 연관관계 매핑
- http
- BOJ
- 프로그래머스
- 킹수빈닷컴
- 김영한 JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |