이 문서는 지원되지 않는 버전의 토토 사이트을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : F.9. Citext-윈 토토 민감하지 않은 문자열 유형버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.7. Citext

theCitext모듈 제공 a 사례에 민감하지 않은 문자열 유형citext. 본질적으로 내부적으로 호출Lower값을 비교할 때. 그렇지 않으면 거의 정확히 동작텍스트.

F.7.1. 이론적 해석

사례에 민감한 일치를 수행하는 표준 접근 방식토토 사이트Lower값을 비교할 때 기능, 예를 들어

선택 * 탭에서 where (col) = holl (?);

이것은 합리적으로 잘 작동하지만 많은 단점이 있습니다.

  • 그것은 당신의 SQL 진술을 장황하게 만듭니다. 그리고 당신은 항상 사용하는 것을 잊지 마십시오Lower둘 다 열 및 쿼리 값

  • 기능 색인을 작성하지 않으면 인덱스를 사용하지 않습니다. 사용Lower.

  • 열을 |고유 한또는기본 키, 암시 적으로 생성되었습니다 인덱스는 대소 문자에 민감합니다. 따라서 사례에 민감한 것은 쓸모가 없습니다 검색을하고 독창성을 강력하게 시행하지 않습니다.

thecitext데이터 유형을 사용하면 가능합니다 전화 제거낮은sql 쿼리, 기본 키가 대소 문자를 사용하도록 허용합니다.citext텍스트소문자 문자는 데이터베이스 규칙에 따라 다릅니다LC_CTYPE설정. 다시,이 행동은입니다 사용과 동일Lowerin 쿼리. 그러나 데이터 유형에 의해 투명하게 수행되기 때문에 쿼리에서 특별한 일을하는 것을 기억할 필요가 없습니다.

F.7.2. 방법 사용

여기에 간단한 예제가 있습니다 :

테이블 사용자 만들기 (
    Nick Citext 1 차 키,
    텍스트를 무효로 전달하십시오
);

사용자 값 ( 'larry', md5 (random () :: text))에 삽입;
사용자 값 ( 'tom', md5 (random () :: text))에 삽입;
사용자 값에 삽입 ( 'Damian', md5 (random () :: text));
사용자 값 ( 'Neal', Md5 (random () :: text))에 삽입;
사용자 값에 삽입 ( 'bjørn', md5 (random () :: text));

nick = 'larry'; 사용자 중 * 선택

select진술은 하나를 반환합니다 튜플이지만Nick열이있었습니다 설정Larry그리고 쿼리는입니다.Larry.

F.7.3. 끈 비교 행동

citext변환하여 비교를 수행합니다 각 문자열에서 소문자 (마치Lower호출) 결과를 비교합니다 보통. 예를 들어, 두 줄은 동일하게 간주됩니다.Lower동일한 결과를 생성합니다 그들을 위해.

대사 가능,citext-특이 적 버전 다수의 문자열 처리 연산자 및 기능 중. 그래서 예, 정규 표현 연산자~and~*동일하게 전시하십시오 적용될 때의 행동citext: 둘 다 비면적으로 일치합니다. 똑같은! ~and! ~*뿐만 아니라 그만큼좋아요운영자~~and~~*! ~~and! ~~*. 원한다면 사례 감지적으로 일치하려면 운영자의 주장을에 캐스팅 할 수 있습니다.텍스트.

마찬가지로 다음 모든 기능이 일치합니다 그들의 주장이있는 경우 사례에 관계없이citext:

  • regexp_matches ()

  • regexp_replace ()

  • regexp_split_to_array ()

  • regexp_split_to_table ()

  • 대체 ()

  • split_part ()

  • strpos ()

  • Translate ()

Regexp 함수의 경우, 대소 문자를 감지하려면, 를 지정할 수 있습니다"C"강제 a 사례에 민감한 일치. 그렇지 않으면, 당신은에 캐스트해야합니다.텍스트원하는 경우 이러한 기능 중 하나를 사용하기 전에 사례에 민감한 행동.

F.7.4. 제한

  • Citext의 사례 폭도 동작은에 따라 다릅니다 그만큼LC_CTYPE데이터베이스 설정. 어떻게 따라서 값은 데이터베이스가 다음과 같은 경우 결정됩니다. 생성. 그것은 유니 코드 표준. 효과적으로 이것이 의미하는 바는 오랫동안입니다 Collation에 만족하므로 행복해야합니다.Citext의 비교. 그러나 데이터가있는 경우 데이터베이스에 저장된 다른 언어, 한 언어 사용자 Collation이라면 쿼리 결과가 예상되지 않을 수 있습니다. 다른 언어입니다.

  • 토토 사이트9.1, 당신은 할 수 있습니다 A 첨부Collate사양Citext열 또는 데이터 값. 현재,citext운영자는 비 디폴트를 존중합니다Collate비교하는 동안 사양 케이스 폴드 문자열이지만 초기 폴딩은 소문자입니다. 항상 데이터베이스에 따라 수행LC_CTYPE설정 (즉, 마치 마치"기본값"). 이것은 변경 될 수 있습니다 미래의 릴리스에서 두 단계 모두 입력을 따릅니다Collate사양.

  • citext만큼 효율적이지 않습니다텍스트운영자가 기능하고 b- 트리하기 때문에 비교 함수는 데이터 사본을 만들어 비교를위한 소문자. 그러나 약간 더 효율적입니다 사용하는 것보다Lower얻을 수 있습니다 사례에 민감한 일치.

  • citext데이터가 필요한 경우 많은 도움이되지 않습니다 일부 상황에서 사례에 관계없이 비교하고 비교적으로 비교합니다 다른 맥락에서. 표준 답변은 사용하는 것입니다.텍스트타이핑하고 수동으로Lower비교해야 할 때 기능 사례에 비해; 이것은 대소 문자를 사용하지 않으면 잘 작동합니다 비교는 드물게 필요합니다. 필요한 경우 대부분의 시간과 사례에 민감한 경우 infrequently, consider storing the data ascitext및 열을 명시 적으로텍스트사례에 민감한 비교를 원할 때. 어느 쪽이든 상황에 따라 두 가지 유형의 두 유형을 원한다면 두 가지 인덱스가 필요합니다. 빠르게 검색합니다.

  • 포함하는 스키마Citext운영자 현재에 있어야search_path(일반적으로public); 그렇지 않은 경우 정상적인 사례에 민감한텍스트운영자가 될 것입니다 대신 호출.

F.7.5. 작가

David E. Wheeler

원래 영감citext모듈 by 도널드 프레이저.