지원되는 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.7. 토토 캔

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

F.7.1. 이론적 해석

|PostgreSQLLower값을 비교할 때 함수

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

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

  • 그것은 당신의 SQL 진술을 장악하게 만들고 항상 사용하는 것을 기억해야합니다Lower열과 쿼리 값 모두에서

  • 기능을 사용하여 기능 색인을 생성하지 않는 한 색인을 사용하지 않습니다Lower.

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

the토토 캔데이터 유형은 전화를 제거 할 수 있습니다LowerSQL 쿼리에서 기본 키가 대소 문자를 사용하도록 허용합니다.토토 캔텍스트, 이는 대문자와 소문자의 일치가 데이터베이스 규칙에 따라 다르다는 것을 의미합니다.LC_CTYPE설정. 다시 말하지만,이 동작은 사용과 동일합니다.낮은쿼리. 그러나 데이터 유형에 의해 투명하게 수행되기 때문에 쿼리에서 특별한 일을하는 것을 기억할 필요가 없습니다..

F.7.2. 사용 방법

여기 사용의 간단한 예는 다음과 같습니다.

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

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

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

theselect명령문은이지만 튜플을 반환합니다.Nick열이 설정되었습니다Larry그리고 쿼리는입니다.Larry.

F.7.3. 문자열 비교 동작

토토 캔각 문자열을 소문자로 변환하여 비교를 수행합니다 (Lower호출)와 결과를 정상적으로 비교합니다. 예를 들어, 두 줄은 동일하게 간주됩니다.Lower동일한 결과를 얻을 것입니다.

가능한 한 가깝게 사례에 민감한 콜레이션을 모방하기 위해토토 캔-여러 스트링 처리 연산자 및 함수의 특이 적 버전. 예를 들어, 정규 표현 연산자~and~*적용 할 때 동일한 동작을 전시합니다토토 캔: 둘 다 케이스 비밀리에 일치합니다. 똑같은! ~and! ~*뿐만 아니라좋아요운영자~~and~~*! ~~and! ~~*. 사례에 민감하게 일치 시키려면 운영자의 주장을에 캐스팅 할 수 있습니다.텍스트.

마찬가지로, 다음과 같은 모든 기능은 인수가 인수하는 경우 사례를 사용하지 않는 일치를 수행합니다토토 캔:

  • regexp_matches ()

  • regexp_replace ()

  • regexp_split_to_array ()

  • regexp_split_to_table ()

  • 대체 ()

  • split_part ()

  • strpos ()

  • Translate ()

regexp 함수의 경우 사례에 관계없이 일치하려면를 지정할 수 있습니다."C"깃발을 강제하여 케이스에 민감한 경기를 강제합니다. 그렇지 않으면, 당신은에 캐스트해야합니다.텍스트사례에 민감한 동작을 원하는 경우 이러한 기능 중 하나를 사용하기 전에.

F.7.4. 제한

  • 토토 캔의 사례 홀딩 동작은에 따라 다릅니다.LC_CTYPE데이터베이스 설정. 따라서 값을 비교하는 방법은 데이터베이스가 생성 될 때 결정됩니다. 유니 코드 표준에 의해 정의 된 용어에서는 진정으로 사례에 민감하지 않습니다. 효과적으로, 이것이 의미하는 바는, 당신이 당신의 콜레이션에 만족하는 한, 당신은 행복해야한다는 것입니다.토토 캔의 비교. 그러나 데이터베이스에 저장된 다른 언어로 된 데이터가있는 경우 한 언어 사용자가 컬렉션이 다른 언어에 대한 경우 쿼리 결과가 예상되지 않을 수 있습니다..

  • PostgreSQL9.1, a를 첨부 할 수 있습니다Collate사양토토 캔열 또는 데이터 값. 현재,토토 캔운영자는 비 디폴트를 존중합니다Collate사양 사례를 비교하는 동안 사양이지만 초기 접이식은 항상 데이터베이스에 따라 수행됩니다.LC_CTYPE설정 (즉, 마치"기본값"). 이것은 미래의 릴리스에서 변경 될 수 있으므로 두 단계 모두 입력을 따릅니다Collate사양.

  • 토토 캔만큼 효율적이지 않습니다텍스트운영자 기능과 B- 트리 비교 함수는 데이터의 사본을 만들어 소문자로 변환해야합니다. 그러나 사용하는 것보다 약간 더 효율적입니다Lower사례에 민감한 일치를 얻으려면

  • 토토 캔다른 상황에서는 일부 상황에서 사례에 민감하게 비교하기 위해 데이터가 필요하다면 많은 도움이되지 않습니다. 표준 답변은 사용하는 것입니다.텍스트타이핑하고 수동으로Lower사례 비교를 비교해야 할 때 기능; 이것은 사례에 민감하지 않은 비교가 드물게 필요하다면 잘 작동합니다. 대부분의 경우 사례에 민감하지 않은 동작이 필요하고 드물게 사례에 민감한 경우 데이터를로 저장하는 것을 고려하십시오.토토 캔및 열을 명시 적으로텍스트사례에 민감한 비교를 원할 때. 두 가지 상황에서는 두 가지 유형의 검색이 빠르기를 원한다면 두 가지 인덱스가 필요합니다.

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

F.7.5. 작가

David E. Wheeler

원래 영감토토 캔Donald Fraser의 모듈.