| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.3 : 토토 커뮤니티 지원 | 스포츠 토토 결과 : 문서 : 9.3 : 현지화 | 22장. 현지화 | PostgreSQL : 문서 : 9.3 : 문자 세트 토토 베이 | |
조합 기능을 사용하면 정렬 순서를 지정할 수 있으며 열별 데이터의 문자 분류 동작 또는 심지어 작업별. 이는 다음과 같은 제한을 완화합니다.LC_COLLATE그리고LC_CTYPE토토 꽁 머니베이스 설정은 생성 후에는 변경할 수 없습니다.
개념적으로, 조합 가능한 데이터 유형의 모든 표현식에는 대조. (내장된 정렬 가능한 데이터 유형은 다음과 같습니다.텍스트, varchar그리고문자. 사용자 정의 기본 유형도 표시할 수 있습니다. 물론 조합 가능한 데이터 유형에 대한 도메인은 조합 가능.) 표현식이 열 참조인 경우 데이터 정렬은 표현식은 열의 정의된 데이터 정렬입니다. 만약 표현식은 상수이고 데이터 정렬은 다음의 기본 데이터 정렬입니다. 상수의 데이터 유형입니다. 더 복잡한 조합 표현식은 다음과 같이 입력의 조합에서 파생됩니다. 아래에 설명되어 있습니다.
표현식의 조합은 다음과 같을 수 있습니다."기본값"collation(로케일 설정을 의미함) 토토 꽁 머니베이스에 대해 정의됩니다. 표현의 경우에도 가능합니다. 토토 꽁 머니 정렬이 불확실합니다. 이러한 경우 주문작업은 토토 꽁 머니 정렬을 알아야 하는 기타 작업은 실패합니다.
데이터베이스 시스템이 주문을 수행해야 할 때 또는
문자 분류에서는 입력 데이터 정렬을 사용합니다.
표현. 예를 들어 이런 일이 발생합니다.주문 기준절과 함수 또는 연산자 호출
와 같이<. 를 신청할 토토 꽁 머니 정렬주문 기준절은 단순히 다음의 조합입니다.
정렬 키. 함수나 연산자를 적용할 데이터 정렬
호출은 아래 설명된 대로 인수에서 파생됩니다. 게다가
비교 연산자의 경우 데이터 정렬은 다음과 같이 고려됩니다.
소문자와 대문자 사이를 변환하는 함수
와 같이하위, 상위및initcap;
패턴 일치 연산자로; 그리고 까지to_char및 관련 기능.
함수 또는 연산자 호출의 경우 파생된 데이터 정렬 인수 대조를 검사하여 런타임에 사용됩니다. 지정된 작업을 수행합니다. 함수의 결과라면 또는 교환원 호출이 조합 가능한 데이터 유형인 경우 조합은 다음과 같습니다. 또한 구문 분석 시 함수의 정의된 데이터 정렬로 사용되거나 연산자 표현식, 주변 표현식이 있는 경우 데이터 정렬에 대한 지식이 필요합니다.
그조합 파생의 표현은 암시적일 수도 있고 명시적일 수도 있습니다. 이러한 구별은 영향을 미칩니다. 여러 개의 서로 다른 토토 꽁 머니 정렬이 있을 때 토토 꽁 머니 정렬을 결합하는 방법 표현으로 나타납니다. 명시적인 토토 꽁 머니 정렬 파생이 발생합니다. 언제콜레이트절이 사용되었습니다. 다른 모든 것 데이터 정렬 파생은 암시적입니다. 여러 데이터 정렬이 필요한 경우 예를 들어 함수 호출에서 다음 규칙을 결합합니다. 사용됩니다:
입력 표현식에 명시적인 데이터 정렬 파생이 있는 경우, 그런 다음 입력 표현식 사이에서 명시적으로 파생된 모든 데이터 정렬 동일해야 하며, 그렇지 않으면 오류가 발생합니다. 명시적으로 있는 경우 파생 데이터 정렬이 존재합니다. 즉, 데이터 정렬의 결과입니다. 조합.
그렇지 않으면 모든 입력 표현식은 동일한 암시적 값을 가져야 합니다. 토토 꽁 머니 정렬 파생 또는 기본 토토 꽁 머니 정렬. 기본값이 아닌 경우 토토 꽁 머니 정렬이 존재합니다. 이는 토토 꽁 머니 정렬의 결과입니다. 조합. 그렇지 않으면 결과는 기본 토토 꽁 머니 정렬입니다.
사이에 기본이 아닌 암시적 데이터 정렬이 충돌하는 경우 입력 표현식의 조합은 다음과 같은 것으로 간주됩니다. 불확실한 대조. 이는 오류 조건이 아닙니다. 호출되는 특정 함수에 대한 지식이 필요합니다. 데이터 정렬이 적용되어야 합니다. 그렇다면 다음 위치에서 오류가 발생합니다. 런타임.
예를 들어, 다음 테이블 정의를 고려하십시오:
테이블 테스트1 생성(
    텍스트 대조 "de_DE",
    b 텍스트 대조 "es_ES",
    ...
);
그럼 안으로
test1에서 < 'foo' 선택;
the<비교가 수행됨 에 따르면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";
콜레이션은 SQL 이름을 매핑하는 SQL 스키마 개체입니다. 운영 체제 로케일. 특히, 이는 조합에 매핑됩니다. 의LC_COLLATE그리고LC_CTYPE. (이름에서 알 수 있듯이 메인은 토토 꽁 머니 정렬의 목적은 설정하는 것입니다.LC_COLLATE, 정렬 순서를 제어합니다. 하지만 그것은 실제로는 거의 필요하지 않습니다.LC_CTYPE다음과 다른 설정LC_COLLATE이므로 수집하는 것이 더 편리합니다. 설정을 위한 또 다른 인프라를 만드는 것보다 하나의 개념으로LC_CTYPE표현식당.) 또한 데이터 정렬 문자 집합 인코딩에 연결되어 있습니다(참조섹션 22.3). 동일한 토토 꽁 머니 정렬 이름이 있을 수 있습니다. 다양한 인코딩이 존재합니다.
모든 플랫폼에서 이름이 지정된 토토 꽁 머니 정렬기본값, C및POSIX사용 가능합니다. 추가 데이터 정렬은 다음과 같습니다. 운영 체제 지원에 따라 사용 가능합니다. 그만큼기본값조합은 다음을 선택합니다.LC_COLLATE그리고LC_CTYPE토토 꽁 머니베이스 생성 시 지정된 값.C그리고POSIX모두 대조 지정하다"전통적인 C"행동, 에서 ASCII 문자만 해당"A"통해"Z"문자로 처리되며 정렬은 문자 코드 바이트 값으로 엄격하게 수행됩니다.
운영 체제가 다중 사용을 지원하는 경우
단일 프로그램 내의 로케일(newlocale및 관련 함수), 그런 다음
데이터베이스 클러스터가 초기화되었습니다.initdb시스템 카탈로그를 채웁니다.pg_collation운영 체제에서 찾은 모든 로케일을 기반으로 한 데이터 정렬을 사용합니다.
당시 시스템. 예를 들어 운영 체제는 다음을 제공할 수 있습니다.
이름이 지정된 로케일de_DE.utf8. initdb그런 다음 이름이 일치하는 데이터 정렬을 생성합니다.de_DE.utf8인코딩용UTF8둘 다 있음LC_COLLATE그리고LC_CTYPE설정
에de_DE.utf8. 또한
와의 대조.utf8태그가 제거됨
이름. 따라서 이름 아래에 대조를 사용할 수도 있습니다.de_DE, 작성이 덜 번거롭습니다.
이름을 인코딩에 덜 의존하게 만듭니다. 참고하세요,
그럼에도 불구하고 초기 데이터 정렬 이름 세트는 다음과 같습니다.
플랫폼에 따라 다릅니다.
다른 값을 가진 대조가 필요한 경우LC_COLLATE그리고LC_CTYPE, 다음을 사용하여 새 데이터 정렬을 만들 수 있습니다.PostgreSQL : 문서 : 9.3 : 배트맨 토토명령. 해당 명령을 사용하여 다음에서 새 데이터 정렬을 만들 수도 있습니다. 기존 데이터 정렬은 유용하게 사용할 수 있습니다. 애플리케이션의 운영 체제 독립적 데이터 정렬 이름입니다.
특정 토토 꽁 머니베이스 내에서는 이를 사용하는 토토 꽁 머니 정렬만 토토 꽁 머니베이스의 인코딩이 중요합니다. 기타 항목pg_collation무시됩니다. 따라서 제거된 토토 꽁 머니 정렬 같은 이름de_DE고려될 수 있습니다 고유하지 않더라도 특정 토토 꽁 머니베이스 내에서는 고유함 전 세계적으로. 제거된 토토 꽁 머니 정렬 이름을 사용하는 것이 좋습니다. 당신이 결정하면 변경해야 할 것이 하나 줄어들 것입니다. 다른 토토 꽁 머니베이스 인코딩으로 변경하십시오. 그러나 참고하세요.기본값, C및POSIX데이터 정렬은 다음과 관계없이 사용할 수 있습니다. 데이터베이스 인코딩.
포스트그레SQL고유한 것으로 간주 토토 꽁 머니 정렬 개체가 동일하더라도 호환되지 않습니다. 속성. 따라서 예를 들어,
a 대조 "C" 선택 < b test1에서 "POSIX" 대조;
다음에도 오류가 발생합니다C그리고POSIX토토 꽁 머니 정렬이 동일합니다. 행동. 제거된 토토 꽁 머니 정렬 이름과 제거되지 않은 토토 꽁 머니 정렬 이름을 혼합하는 것은 따라서 권장되지 않습니다.