알아볼게 있어서 locale 글을 많이 찾아봣는데요
결론은 로케일을 c 로 처음부터 주는게 맞다고 생각이 되는데 ( collate ctype 는 중도에 변경도 안되고 locale c외 사용할경우 index , like등에서 문제가 있다고 이해햇습니다 )
글을 보면 따로 locale=ko_kr.utf8 로 주는경우가 있는것같은데 다른 장점이 있는걸까요??
PostgreSQL에서 locale은 여섯가지 영역에서 자국화를 지원합니다.
locale=ko_KR.utf8
이렇게 설정된 경우, 기본적으로 위 여섯가지 설정 모두 ko_KR.utf8 을 따르게 됩니다.
또한 이중에, lc_collate와, lc_ctype은 데이터베이스가 만들어지면 그 데이터베이스의 인코딩(utf8)과 함께 더 이상 못바꾸게 됩니다.
문제는 lc_collate 는 like 검색에서의 인덱스 사용문제, 정렬 문제 등 데이터베이스 성능과 관련된 부분에 직접적인 영향을 미치기 때문에,
lc_collate 값이 C 가 아닌 값으로 지정될 경우, 테이블이나, 인덱스를 만들 때 있어 응용 프로그램에서 어떻게 쿼리를 사용하느냐에 따라서
각각 collate 값을 신경 써야합니다. 심지어 조회 쿼리를 작성할 때 조차도.
그래서, 이런 번거로움을 피하기 위해서,
"이 데이터베이스의 collate 값은 무조건 C야" 라고 단순화 하는 것이 좋습니다.
더 정확하게 이야기하면, 프랑스어나, 독일어같이 영어 알파벳 순서가 앞에 오고, 악센트 부호 있는 모음들이 그 뒤에 오는 것을 방지하기 위해서 부득이 C 아닌 값을 해야하는 경우도 있습니다. 하지만 한국어 환경에서는 C로 하면, 한자와 일본문자가 한글 앞에 오는 문제가 있는 것 빼고는 크게 문제되지 않기 때문에, 그냥 C로 쓰는게 편해요.
또 다른 문제는 lc_ctype 쪽인데, 이 부분은 논리복제 기능을 이용하는 경우, 두 데이터베이스의 lc_ctype 값이 같아야 문제가 생기지 않습니다. 또한 이 lc_ctype 값과 OS의 LANG 환경변수값과도 같아야합니다. (이 문제는 나중에 고쳐질지는 모르겠지만, 최근 확인한 것으로는 아직까지는 그래요)
그래서, lc_ctype 값 선택도 잘하셔야합니다. 물론 논리복제 기능을 전혀 안쓴다면 고려사항은 아니겠지만 말입니다.
로케일 영역은 공부할게 원래 많아요. 특히 영어가 모국어가 아닌 환경에서는 말이죠.