그래서 PostgreSQL이 설치된 데비안 서버가 거의 없습니다. 역사적으로 이러한 서버와 PostgreSQL은 라틴 9 문자 세트로 현지화되어 그 당시에는 괜찮 았습니다. 이제 우리는 폴란드어, 그리스어 또는 중국어와 같은 것을 처리해야하므로 변경이 점점 커지고 있습니다.
UTF8 데이터베이스를 만들려고 할 때 메시지가 나타납니다.
오류 : UTF8 인코딩이 로케일 fr_FR과 일치하지 않습니다. 세부 사항 : 선택한 LC_CTYPE 설정에는 인코딩 LATIN9가 필요합니다.
몇 번이나 내 오래된 친구 Google로 주제에 대해 조사한 결과, 데비안 업데이트 LANG
, PostgreSQL을 올바른 문자 세트로 다시 컴파일, 모든 LC_
시스템 변수 및 기타 모호한 솔루션 편집과 같은 지나치게 복잡한 절차 만 발견 할 수있었습니다 . 당분간은이 문제를 제쳐 두었습니다.
최근에 다시 돌아 왔는데, 그리스인들은 물건을 원하고 라틴 9는 원하지 않습니다. 그리고이 문제를 다시 살펴 보는 동안 한 동료가 내게 와서“아, 쉽게 봅니다.”라고 말했습니다.
그는 아무것도 편집하지 않았고, 마술을하지 않았으며, 단지이 SQL 쿼리를 만듭니다.
CREATE DATABASE my_utf8_db
WITH ENCODING='UTF8'
OWNER=admin
TEMPLATE=template0
LC_COLLATE='C'
LC_CTYPE='C'
CONNECTION LIMIT=-1
TABLESPACE=pg_default;
그리고 잘 작동했습니다.
나는 실제로 알지 못했고 LC_CTYPE='C'
이것을 사용하는 것이 Google의 첫 번째 솔루션이 아니고 심지어 스택 오버플로가 아니라는 것에 놀랐습니다. 나는 둘러보고 PostgreSQL 문서에 대한 언급 만 발견했습니다.
LC_CTYPE이 C 또는 POSIX 인 경우 모든 문자 세트가 허용되지만 LC_CTYPE의 다른 설정의 경우 올바르게 작동하는 문자 세트가 하나만 있습니다. LC_CTYPE 설정은 initdb에 의해 고정되므로 C 또는 POSIX 로케일을 선택할 때를 제외하고 클러스터의 서로 다른 데이터베이스에서 다른 인코딩을 사용하는 명백한 유연성은 실제보다 더 이론적입니다 (따라서 실제 로케일 인식을 사용 안함).
그래서, 이것이 너무 쉽고 완벽하다는 것이 궁금했습니다. 단점은 무엇입니까? 그리고 나는 아직 답을 찾는 데 어려움을 겪었습니다. 그래서 여기에 게시하겠습니다.
tl; dr : 특정 지역화에 비해 단점은 무엇입니까 LC_CTYPE='C'
? 그렇게하는 것이 나쁜가요? 무엇을 깨뜨릴 수 있을까요?