이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 23.2. 메이저 토토 사이트 Support버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

22.2. 대조 지원

조합 기능을 사용하면 정렬 순서를 지정할 수 있으며 열별 데이터의 문자 분류 동작 또는 심지어 작업별. 이는 다음과 같은 제한을 완화합니다.LC_COLLATE그리고LC_CTYPE젠 토토베이스 설정은 변경할 수 없습니다 생성 후.

22.2.1. 개념

개념적으로, 조합 가능한 데이터 유형의 모든 표현식은 대조. (내장된 정렬 가능한 데이터 유형은 다음과 같습니다.텍스트, varchar문자. 사용자 정의 기본 유형도 표시할 수 있습니다. 조합 가능, 물론 조합 가능한 데이터 유형에 대한 도메인 조합 가능합니다.) 표현식이 열 참조인 경우 표현식의 데이터 정렬은 정의된 데이터 정렬입니다. 칼럼. 표현식이 상수인 경우 데이터 정렬은 상수 데이터 유형의 기본 데이터 정렬입니다. 는 더 복잡한 표현의 조합은 다음에서 파생됩니다. 아래에 설명된 대로 입력의 데이터 정렬입니다.

표현식의 조합은 다음과 같을 수 있습니다."기본값"젠 토토(로케일을 의미함) 데이터베이스에 대해 정의된 설정입니다. 또한 가능합니다. 표현식의 데이터 정렬이 불확실합니다. 그러한 경우, 주문 작업 및 기타 작업을 알아야 합니다. 대조가 실패합니다.

데이터베이스 시스템이 주문을 수행해야 할 때 또는 문자 분류에서는 입력 데이터 정렬을 사용합니다. 표현. 예를 들어 이런 일이 발생합니다.주문 기준절 및 함수 또는 연산자 호출 같은<. 적용할 젠 토토 정렬 한 동안주문 기준절은 단순히 정렬 키의 대조. 신청할 대조 함수 또는 연산자 호출은 다음과 같이 인수에서 파생됩니다. 아래에 설명되어 있습니다. 비교연산자 외에도 데이터 정렬은 변환하는 함수에 의해 고려됩니다. 소문자와 대문자 사이(예:)하위, 상부, 그리고initcap; 패턴 매칭으로 운영자; 그리고 까지to_char그리고 관련 기능입니다.

함수 또는 연산자 호출의 경우, 실행 시 사용되는 인수 대조를 검사하여 파생됨 지정된 작업을 수행하는 데 걸리는 시간입니다. 의 결과라면 함수 또는 연산자 호출이 조합 가능한 젠 토토 유형인 경우 젠 토토 정렬은 구문 분석 시 정의된 젠 토토 정렬로도 사용됩니다. 함수 또는 연산자 표현식의 경우 주변 표현에 대한 지식이 필요함 대조.

조합 파생의 표현은 암시적일 수도 있고 명시적일 수도 있습니다. 이 구별은 서로 다른 여러 데이터 정렬이 결합되는 방식에 영향을 줍니다. 데이터 정렬이 표현식에 나타납니다. 명시적 대조 파생은 다음과 같은 경우에 발생합니다.콜레이트절이 사용되었습니다. 다른 모든 데이터 정렬 파생은 암시적입니다. 예를 들어 여러 데이터 정렬을 결합해야 하는 경우 함수 호출에는 다음 규칙이 사용됩니다.

  1. 입력 표현식에 명시적인 데이터 정렬이 있는 경우 파생된 다음, 다음 사이에서 명시적으로 파생된 모든 데이터 정렬 입력 표현식은 동일해야 합니다. 그렇지 않으면 오류가 발생합니다. 제기됩니다. 명시적으로 파생된 데이터 정렬이 있는 경우 이는 데이터 정렬 조합의 결과입니다.

  2. 그렇지 않으면 모든 입력 표현식은 동일해야 합니다 암시적 데이터 정렬 파생 또는 기본 데이터 정렬. 만약에 기본이 아닌 데이터 정렬이 존재합니다. 이는 다음의 결과입니다. 콜레이션 조합. 그렇지 않으면 결과는 다음과 같습니다. 기본 데이터 정렬.

  3. 기본이 아닌 암시적 젠 토토 정렬이 충돌하는 경우 입력 표현식 중 조합이 간주됩니다. 불확실한 젠 토토 정렬을 갖습니다. 이것은 오류가 아닙니다. 특정 함수가 호출되지 않는 한 조건 적용해야 하는 젠 토토 정렬에 대한 지식이 필요합니다. 그렇다면 그렇지 않으면 런타임에 오류가 발생합니다.

예를 들어, 다음 테이블 정의를 고려해보세요:

테이블 테스트1 생성(
    텍스트 대조 "de_DE",
    b 텍스트 대조 "es_ES",
    ...
);

그럼 안으로

test1에서 < 'foo' 선택;

<비교가 수행됨 에 따르면de_DE규칙이기 때문에 표현식은 암시적으로 파생된 데이터 정렬을 다음과 결합합니다. 기본 대조. 하지만

SELECT a < ('foo' COLLATE "fr_FR") FROM test1;

비교는 다음을 사용하여 수행됩니다.fr_FR규칙, 왜냐하면 명시적인 젠 토토 정렬이 파생은 암시적 파생보다 우선합니다. 게다가 주어진

테스트1에서 a < b 선택;

파서가 적용할 젠 토토 정렬을 결정할 수 없습니다. 왜냐하면a그리고b열에 충돌하는 암시적 내용이 있습니다. 젠 토토 정렬. 이후<연산자 어떤 데이터 정렬을 사용해야 하는지 알아야 합니다. 오류. 명시적인 파일을 첨부하여 오류를 해결할 수 있습니다. 데이터 정렬 지정자를 입력 표현식 중 하나로 지정하면 다음과 같습니다.

select a < b test1에서 "de_DE" 대조;

또는 동등하게

collate "de_DE" < b FROM test1; 선택

반면, 구조적으로 유사한 경우

선택 || b 테스트1에서;

오류가 발생하지 않습니다. 왜냐하면||연산자는 젠 토토 정렬에 신경 쓰지 않습니다. 결과는 젠 토토 정렬에 관계없이 동일합니다.

함수 또는 연산자 조합에 할당된 데이터 정렬 입력 표현식도 함수에 적용되는 것으로 간주됩니다. 또는 연산자의 결과(함수나 연산자가 다음을 전달하는 경우) 조합 가능한 데이터 유형의 결과입니다. 그래서, 안으로

SELECT * FROM test1 ORDER BY || '푸';

주문은 다음에 따라 이루어집니다.de_DE규칙. 하지만 이 쿼리는:

SELECT * FROM test1 ORDER BY || 비;

오류가 발생합니다. 왜냐하면||연산자는 젠 토토 정렬을 알 필요가 없습니다.주문 기준절이 그렇습니다. 이전과 마찬가지로, 명시적인 데이터 정렬을 통해 충돌을 해결할 수 있습니다. 지정자:

SELECT * FROM test1 ORDER BY || b 대조 "fr_FR";

22.2.2. 젠 토토 정렬 관리

콜레이션은 SQL 이름을 매핑하는 SQL 스키마 개체입니다. 운영 체제 로케일. 특히, 이는 다음과 같이 매핑됩니다. 의 조합LC_COLLATE그리고LC_CTYPE. (이름에서 알 수 있듯, 데이터 정렬의 주요 목적은 다음을 설정하는 것입니다.LC_COLLATE, 정렬 순서를 제어합니다. 하지만 그것은 실제로는 거의 필요하지 않습니다.LC_CTYPE다음과 다른 설정LC_COLLATE이므로 더 편리합니다. 다른 개념을 만드는 것보다 하나의 개념으로 이러한 요소를 수집하세요. 설정을 위한 인프라LC_CTYPE당 식.) 또한 데이터 정렬은 문자 집합에 연결되어 있습니다. 인코딩(참조PostgreSQL : 문서 : 9.1 : 문자 세트 토토 베이). 는 다른 인코딩에 대해 동일한 젠 토토 정렬 이름이 존재할 수 있습니다.

모든 플랫폼에서 이름이 지정된 젠 토토 정렬은기본값, CPOSIX사용 가능합니다. 추가 운영 체제에 따라 데이터 정렬을 사용할 수 있습니다. 지원.기본값조합 선택LC_COLLATE그리고LC_CTYPE젠 토토베이스 생성 시 지정된 값 시간.C그리고POSIX콜레이션 모두 지정"전통적인 C"동작, 여기서는 ASCII 문자"A"통해"Z"다음과 같이 취급됩니다. 문자 및 정렬은 문자 코드 바이트별로 엄격하게 수행됩니다. 값.

운영 체제가 다중 사용을 지원하는 경우 단일 프로그램 내의 로케일(newlocale및 관련 함수), 그런 다음 데이터베이스 클러스터가 초기화되었습니다.initdb시스템 카탈로그를 채웁니다pg_젠 토토모든 항목을 기반으로 한 데이터 정렬 포함 당시 운영 체제에서 찾은 로케일입니다. 에 대한 예를 들어, 운영 체제는 다음과 같은 로케일을 제공할 수 있습니다.de_DE.utf8. initdb그런 다음 이름이 일치하는 데이터 정렬을 생성합니다de_DE.utf8인코딩용UTF8둘 다 있음LC_COLLATE그리고LC_CTYPE다음으로 설정됨de_DE.utf8. 또한 생성됩니다 와의 대조.utf8태그 이름을 벗겨냈습니다. 따라서 젠 토토 정렬을 사용할 수도 있습니다. 이름 아래에de_DE, 이는 더 적습니다. 작성하기가 번거롭고 이름의 인코딩 의존도가 낮아집니다. 그럼에도 불구하고 초기 데이터 정렬 이름 집합은 다음과 같습니다. 플랫폼에 따라 다릅니다.

다른 값을 가진 대조가 필요한 경우LC_COLLATE그리고LC_CTYPE, 새 데이터 정렬은 다음을 사용하여 생성될 수 있습니다.토토 결과 : 문서 : 9.1 : COLLATION명령. 해당 명령을 사용하여 새 항목을 만들 수도 있습니다. 기존 젠 토토 정렬에서 젠 토토 정렬을 수행하면 유용할 수 있습니다. 운영 체제에 독립적인 젠 토토 정렬 이름을 사용할 수 있습니다. 응용 프로그램.

특정 데이터베이스 내에서는 다음을 사용하는 데이터 정렬만 해당 데이터베이스의 인코딩이 중요합니다. 기타 항목pg_젠 토토무시됩니다. 따라서, 다음과 같이 제거된 데이터 정렬 이름de_DE비록 특정 젠 토토베이스 내에서 고유한 것으로 간주될 수 있습니다. 전 세계적으로 고유하지 않습니다. 제거된 젠 토토 정렬 사용 이름을 사용하면 작업이 하나 줄어들므로 권장됩니다. 다른 젠 토토베이스로 변경하기로 결정한 경우 변경해야 함 인코딩. 그러나 참고하세요.기본값, CPOSIX콜레이션을 사용할 수 있습니다. 젠 토토베이스 인코딩에 관계없이.

PostgreSQL고려하다 서로 다른 젠 토토 정렬 개체가 호환되지 않는 경우에도 동일한 속성을 가지고 있습니다. 따라서 예를 들어,

a COLLATE "C" 선택 < b test1에서 "POSIX" COLLATE "C";

다음에도 오류가 발생합니다C그리고POSIX조합 동일한 행동을 합니다. 벗겨진 것과 벗겨지지 않은 것을 섞는다 따라서 젠 토토 정렬 이름은 권장되지 않습니다.