| 젠 토토 : 문서 : 9.6 : 젠 토토 | |||
|---|---|---|---|
| 토토 꽁 머니 PostgreSQL : 문서 : 9.6 : Locale Support | PostgreSQL : 문서 : 9.6 : 토토 커뮤니티 | 23장. 현지화 | PostgreSQL : 문서 : 9.6 : 배트맨 토토 세트 지원 |
조합 기능을 사용하면 열별 또는 작업별로 데이터의 정렬 순서와 문자 분류 동작을 지정할 수 있습니다. 이는 다음과 같은 제한을 완화합니다.LC_COLLATE그리고LC_CTYPE토토 커뮤니티베이스 설정은 생성 후에는 변경할 수 없습니다.
개념적으로, 조합 가능한 데이터 유형의 모든 표현에는 조합이 있습니다. (내장된 정렬 가능한 데이터 유형은 다음과 같습니다.텍스트, varchar그리고문자. 사용자 정의 기본 유형도 조합 가능으로 표시될 수 있으며 물론 조합 가능한 토토 커뮤니티 유형에 대한 도메인도 조합 가능합니다.) 표현식이 열 참조인 경우 표현식의 토토 커뮤니티 정렬은 열의 정의된 토토 커뮤니티 정렬입니다. 식이 상수인 경우 토토 커뮤니티 정렬은 상수 토토 커뮤니티 형식의 기본 토토 커뮤니티 정렬입니다. 더 복잡한 표현식의 토토 커뮤니티 정렬은 아래에 설명된 대로 해당 입력의 토토 커뮤니티 정렬에서 파생됩니다.
표현식의 조합은 다음과 같을 수 있습니다."기본값"토토 커뮤니티은 데이터베이스에 대해 정의된 로케일 설정을 의미합니다. 표현식의 데이터 정렬이 불확실할 수도 있습니다. 이러한 경우 정렬 작업과 데이터 정렬을 알아야 하는 기타 작업이 실패합니다.
데이터베이스 시스템은 순서 지정이나 문자 분류를 수행해야 할 때 입력 표현식의 조합을 사용합니다. 예를 들어 이런 일이 발생합니다.주문 기준절 및 함수 또는 다음과 같은 연산자 호출<. 를 신청할 토토 커뮤니티 정렬주문 기준절은 단순히 정렬 키의 조합입니다. 함수 또는 연산자 호출에 적용할 데이터 정렬은 아래 설명된 대로 인수에서 파생됩니다. 비교 연산자 외에도, 소문자와 대문자 사이를 변환하는 함수를 통해 데이터 정렬이 고려됩니다.하위, 상위및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표현식당.) 또한 데이터 정렬은 문자 집합 인코딩에 연결됩니다(참조PostgreSQL : 문서 : 9.6 : 배트맨 토토 세트 지원). 다른 인코딩에 대해 동일한 토토 커뮤니티 정렬 이름이 존재할 수 있습니다.
모든 플랫폼에서 이름이 지정된 토토 커뮤니티 정렬기본값, C및POSIX사용 가능합니다. 운영 체제 지원에 따라 추가 데이터 정렬을 사용할 수 있습니다.기본값조합은 다음을 선택합니다.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, 다음을 사용하여 새 데이터 정렬을 만들 수 있습니다.PostgreSQL : 문서 : 9.6 : 토토 사이트명령. 해당 명령을 사용하여 기존 토토 커뮤니티 정렬에서 새 토토 커뮤니티 정렬을 만들 수도 있습니다. 이는 애플리케이션에서 운영 체제 독립적인 토토 커뮤니티 정렬 이름을 사용하는 데 유용할 수 있습니다.
특정 토토 커뮤니티베이스 내에서는 해당 토토 커뮤니티베이스의 인코딩을 사용하는 토토 커뮤니티 정렬만 관심이 있습니다. 기타 항목pg_토토 커뮤니티무시됩니다. 따라서 다음과 같은 제거된 데이터 정렬 이름은de_DE전역적으로 고유하지 않더라도 특정 토토 커뮤니티베이스 내에서는 고유한 것으로 간주될 수 있습니다. 다른 토토 커뮤니티베이스 인코딩으로 변경하기로 결정한 경우 변경해야 할 항목이 하나 줄어들기 때문에 제거된 토토 커뮤니티 정렬 이름을 사용하는 것이 좋습니다. 그러나 참고하세요.기본값, C및POSIX토토 커뮤니티 정렬은 토토 커뮤니티베이스 인코딩에 관계없이 사용될 수 있습니다.
PostgreSQL동일한 속성을 갖고 있어도 고유한 토토 커뮤니티 정렬 개체가 호환되지 않는 것으로 간주합니다. 따라서 예를 들어,
a 대조 "C" 선택 < b test1에서 "POSIX" 대조;
다음에도 오류가 발생합니다C그리고POSIX조합은 동일한 동작을 갖습니다. 따라서 제거된 토토 커뮤니티 정렬 이름과 제거되지 않은 토토 커뮤니티 정렬 이름을 혼합하는 것은 권장되지 않습니다.