2016-09-13 5 views
1

정확히은 postgres의 utf8 문자 집합 내에 저장된 모든 언어를 원활하게 지원하기위한 언어입니다. en_US.utf8과 같이 문자 집합과 함께 언어 별 데이터 정렬을 지정해야합니다. 실수가 아니라면 을 의미있는 데이터 정렬 동작으로 유지하면서 영어 (en_US)와 중국어 (zh_CN)를 동일한 utf8 열에 저장할 수있는 능력이 없습니다. 열을 en_US.utf8으로 정의하면 중국어 (zh_CN) 문자/바이트 시퀀스가 ​​포함 된 값을 처리하는 것이 어떻게됩니까? 실제로 단일 열 값은 여러 언어 (예 : "안녕하세요 및 晚安")를 포함 할 수 있으며 단순히 단일 언어에 따라 조합 할 수 없습니다.postgresql에서 utf8을 사용하는 여러 언어

예, 실제로 모든 문자 시퀀스를 저장할 수 있습니다. 그러나 영어, 독일어, 중국어, 일본어 및 한국어 문자열이 포함 된 en_US.utf8 열에서 주문에 대해 정의 된 동작은 무엇입니까?

나는 mysql의 utf8mb4_unicode_ci 데이터 정렬이 완벽하지 않으며 전체 유니 코드 집합을 대조하는 방법에 대해 설정된 표준을 따르지 않는다는 것을 알고 있습니다. 이미 mysql의 언어 독립적 인 데이터 정렬이 임의적이거나, 의미 상 무의미하거나, 심지어는 무효화되는 것에 대해 한숨 돌리는 반 (反) mysql 군중을들을 수 있습니다. 그러나 실제로는 이 충분히 작동하며이며 utf8 = 다중 언어 유니 코드 지원이라는 기대를 충족합니다.

postgres는 의미 상으로는 이라는 매우 완고한 사람입니까? 유니 코드 스펙트럼에서 대조가 잘못 되었습니까? 나는 개발자가 "사양에 따라 작업을 수행"할 때 매우 엄격하다는 것을 알고 있지만, 여러 언어를 저글링 할 수없는이 무능력은 적어도 말하기는 실망 스럽다. 다중 언어 문제를 해결하는 무언가가 누락 되었습니까? 또는 단일 utf8 열이 모든 언어를 처리 할 수 ​​있지만 공식 언어는 한 번에 하나의 언어 만 처리 할 수있는 공식입니다.

+1

"*하지만 영어, 독일어, 중국어, 일본어 및 한국어 문자열 *이 포함 된 열에서 순서가 정의 된 동작은 무엇입니까?"- 단순히 넣을 수 없습니다. 안타깝게도 데이터 정렬 지원은 Postgres의 가장 강력한 영역이 아니며 'ORDER BY'연산자는 정렬을위한 데이터 정렬을 지정할 수 없으며 단일 언어 만 선택하는 경우 이동 방법이 될 수 있습니다. _content_를 여러 언어로 쉽게 처리 할 수 ​​있지만 정렬을 처리 할 수 ​​없습니다. –

+0

당신은 언제나'collate = "C"'- UTF8에서 얼마나 잘 작동하는지 알 수는 있지만 –

답변

2

문자열을 언어별로 대조 할 수있는 완벽한 방법은 없을 것입니다.

PostgreSQL은 자체 데이터 정렬을 만들지 않고 운영 체제에서 제공하는 데이터 정렬을 사용하기로 결정했습니다. 이것의 배경은 바퀴를 다시 발명하는 것을 피하고 유지 보수 노력을 줄이는 것입니다.
그래서 전통적인 PostgreSQL의 대답은 다음과 같습니다 : 다른 언어의 문자열에 대해 비교적 잘 작동하는 문자열 데이터 정렬을 원한다면 운영 체제 공급 업체에 불평하거나 그러한 데이터 정렬을 제공하는 운영 체제를 선택하십시오. 어떤 –명가 제공하는 데이터 정렬 지원을 기반으로 운영 체제에 결정하는 경우

  • 거의 – :

    그러나,이 방법은 PostgreSQL의 지역 사회의 인식 단점이있다.

  • PostgreSQL의 정렬 동작은 기본 운영 체제에 따라 다르므로 혼란스러운 사용자가 메일 링리스트에서 자주 질문하게됩니다.

  • 일부 운영 체제에서는 운영 체제 업그레이드 중에 데이터 정렬 동작이 변경되어 데이터베이스 인덱스가 손상 될 수 있습니다 (예 : this thread 참조).

PostgreSQL이 접근 방식을 변경했을 수도 있습니다. 운영 체제 데이터 정렬 (예 : this recent thread 참조) 대신에 ICU 라이브러리를 사용하기위한 노력이 반복되어 이러한 문제 중 일부가 완화되었습니다.

+0

고맙습니다. 매우 유익합니다. 안타깝 네요. 9.0에서 코어에 복제가 추가 된 이후 실제 프로젝트를 위해 pg로 이동하기를 기다리고있었습니다. 필자는 사용자가 제공 한 utf8 문자열을 정렬하지 않고 살 수 있는지 전체 프로젝트를 계획해야합니다. 이 시나리오를 해결할 수있는 기본 제공 데이터 정렬을 사용하는 운영 체제에 대해 언급합니다. 귀하의 링크를 기반으로 CentOS가 그 중 하나 인 것 같습니다. 어떤 운영 체제가이 설정을 지원하는지 배우려면 어떤 용어를 검색해야합니까? 그리고 OS 구성 방법에 대해 알아 보려면 어떻게해야합니까? –

+0

CentOS는 RedHat 클론입니다. 맞습니까? RedHat Linux에서 결과를 재현 할 수 있으며, 데이터 정렬 지원을 제공하는 구성 요소에는 glibc가 있습니다. glibc를 사용하지 않는 Linuxen이 있습니까? 이 문제 때문에 어떤 Linux 배포판을 사용하든 상관 없습니다. 필자가 할 일은'sort' 명령어로 여러 언어로 된 테스트 문자열입니다. 이것은 OS 정렬을 사용하므로 정렬 순서가 맞는지 테스트 할 수 있습니다. –