| 토토 사이트 9.3.25 문서 | ||||
|---|---|---|---|---|
| 이전 | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공 모듈 | 다음 | |
그citext모듈은 다음을 제공합니다.
대소문자를 구분하지 않는 문자열 유형,citext. 본질적으로 내부적으로 호출합니다.하위값을 비교할 때. 그렇지 않으면
거의 똑같게 행동합니다텍스트.
대소토토 사이트 구분하지 않는 일치를 수행하는 표준 접근 방식포스트그레SQL다음을 사용했습니다낮은값을 비교할 때 함수,
예를 들어
SELECT * FROM 탭 WHERE lower(col) = LOWER(?);
이것은 합리적으로 잘 작동하지만 여러 가지 단점이 있습니다:
그것은 당신의 SQL 문을 장황하게 만들고 당신은 항상
사용하는 것을 기억하세요하위둘 다
열과 쿼리 값입니다.
기능 색인을 생성하지 않는 한 색인을 사용하지 않습니다.
사용 중하위.
열을 다음과 같이 선언하는 경우고유또는기본 키, 암시적으로 생성된 인덱스는 대소문자를 구분합니다. 따라서 대소문자를 구분하지 않는 경우에는 쓸모가 없습니다. 검색하면 대소문자를 구분하지 않고 고유성을 적용하지 않습니다.
그citext데이터 유형을 사용하면 다음을 수행할 수 있습니다.
호출 제거하위SQL에서
쿼리하고 기본 키가 대소문자를 구분하지 않도록 허용합니다.citext다음과 같이 로케일을 인식합니다텍스트, 이는 대문자와
소문자는 데이터베이스 규칙에 따라 다릅니다.LC_CTYPE설정. 이번에도 이런 행동은
의 사용법과 동일합니다.하위에
쿼리. 하지만 데이터 유형별로 투명하게 이루어지기 때문에
검색어에 특별한 작업을 수행하는 것을 기억할 필요가 없습니다.
다음은 간단한 사용법 예입니다:
테이블 사용자 생성(
닉 CITEXT 기본 키,
TEXT NOT NULL을 전달합니다.
);
INSERT INTO users VALUES ( 'larry', md5(random()::text) );
INSERT INTO users VALUES ( 'Tom', md5(random()::text) );
INSERT INTO users VALUES ( 'Damian', md5(random()::text) );
INSERT INTO users VALUES ( 'NEAL', md5(random()::text) );
INSERT INTO users VALUES ( 'Bjørn', md5(random()::text) );
SELECT * FROM 사용자 WHERE nick = 'Larry';
그선택문은 하나를 반환합니다 튜플, 비록닉열은 으로 설정됨래리그리고 쿼리는래리.
citext변환하여 비교를 수행합니다.
각 문자열을 소문자로 (마치하위호출) 후 결과를 비교
보통. 따라서 예를 들어 다음과 같은 경우 두 문자열이 동일한 것으로 간주됩니다.하위동일한 결과를 생성합니다
그들을 위해.
대소토토 사이트 구분하지 않는 데이터 정렬을 최대한 가깝게 에뮬레이션하기 위해 가능합니다.citext특정 버전 다양한 문자열 처리 연산자 및 함수 중 하나입니다. 그래서, 예, 정규식 연산자~그리고~*같은 것을 전시하다 적용 시 동작citext: 둘 다 대소토토 사이트 구분하지 않고 일치합니다. 의 경우에도 마찬가지입니다.!~그리고!~*뿐만 아니라 그만큼좋아요연산자~~그리고~~*및!~~그리고!~~*. 당신이 원한다면 대소문자를 구분하여 일치시키려면 연산자의 인수를 다음으로 캐스팅할 수 있습니다.텍스트.
마찬가지로 다음 함수는 모두 일치를 수행합니다 인수가 다음과 같은 경우 대소문자를 구분하지 않습니다.citext:
regexp_matches()
regexp_replace()
regexp_split_to_array()
regexp_split_to_table()
교체()
split_part()
strpos()
번역()
정규식 함수의 경우 대소토토 사이트 구분하여 일치시키려면, 당신은 지정할 수 있습니다"c"플래그를 강제 실행 대소문자를 구분합니다. 그렇지 않으면 다음으로 전송해야 합니다.텍스트원하는 경우 이 기능 중 하나를 사용하기 전에 대소토토 사이트 구분하는 동작입니다.
citext의 케이스 접기 동작은 다음에 따라 달라집니다. 그만큼LC_CTYPE데이터베이스 설정. 어떻게 따라서 값을 비교하는 것은 데이터베이스가 완료될 때 결정됩니다. 생성되었습니다. 정의된 용어에서는 실제로 대소문자를 구분하지 않습니다. 유니코드 표준. 사실상 이것이 의미하는 바는 다음과 같습니다. 당신이 당신의 데이터 정렬에 만족한다면, 당신도 만족할 것입니다.citext의 비교입니다. 하지만 데이터가 있으면 데이터베이스에 저장된 다른 언어, 한 언어의 사용자 데이터 정렬이 수행된 경우 쿼리 결과가 예상과 다르다는 것을 알 수 있습니다. 다른 언어용입니다.
현재토토 사이트9.1, 할 수 있어요 첨부해 주세요콜레이트지정 대상citext열 또는 데이터 값. 현재,citext연산자는 기본값이 아닌 것을 존중합니다콜레이트비교하는 동안 사양 대소문자로 접힌 끈이지만 처음에는 소문자로 접는 것이 항상 데이터베이스의 지시에 따라 수행됩니다.LC_CTYPE설정(즉, 마치콜레이트 "기본값"주어졌습니다). 이는 변경될 수 있습니다. 향후 릴리스에서는 두 단계 모두 입력을 따르도록 합니다.콜레이트사양.
citext다음만큼 효율적이지 않습니다.텍스트연산자 기능과 B-트리 때문입니다.
비교 함수는 데이터의 복사본을 만들고 이를 다음으로 변환해야 합니다.
비교를 위해 소문자. 그러나 조금 더 효율적입니다.
사용하는 것보다하위얻다
대소토토 사이트 구분하지 않는 일치.
citext데이터가 필요한 경우 별로 도움이 되지 않습니다.
일부 상황에서는 대소문자를 구분하고 대소문자를 구분하지 않고 비교합니다.
다른 맥락에서는. 표준 대답은 다음을 사용하는 것입니다.텍스트입력하고 수동으로 사용하위비교가 필요한 경우 함수
대소문자를 구분하지 않음; 대소 문자를 구분하지 않으면 괜찮습니다.
비교는 가끔씩만 필요합니다. 필요한 경우
대부분의 경우 대소 문자를 구분하지 않고 대소 문자를 구분하는 동작
드물게 데이터를 다음과 같이 저장하는 것을 고려하십시오.citext그리고 명시적으로 열을 다음으로 캐스팅텍스트대소토토 사이트 구분하여 비교하려는 경우. 어느 쪽이든
상황에 따라 두 가지 유형의 인덱스를 모두 원하는 경우 두 개의 인덱스가 필요합니다.
빨리 검색하세요.
다음을 포함하는 스키마citext연산자 현재 상태여야 합니다.검색_경로(일반적으로공개); 그렇지 않다면, 보통 대소토토 사이트 구분함텍스트연산자는 대신 호출됩니다.