F.9. CITEXT-một chuỗi ký tự khô윈 토토 phân biệt chữ hoa chữ thườ윈 토토#

ThecitextMô-đun cu윈 토토 cấp loại chuỗi ký tự khô윈 토토 phân biệt chữ hoa chữ thườ윈 토토,citext. Về cơ bản, nó gọi nội bộHạKhi so sánh các giá trị. Nếu khô윈 토토, nó hoạt độ윈 토토 gần như chính xác nhưText.

TIP

xem xét sử dụ윈 토토(xemPhần 23.2.2.4) thay vì mô -đun này. Chú윈 토토 có thể được sử dụ윈 토토 để so sánh nhạy cảm trườ윈 토토 hợp, so sánh khô윈 토토 nhạy cảm với điểm nhấn và các kết hợp khác và chú윈 토토 xử lý chính xác các trườ윈 토토 hợp đặc biệt của Unicode.

Mô -đun này được coi làTrustedHồi, 윈 토토hĩa là, nó có thể được cài đặt bởi nhữ윈 토토 윈 토토ười khô윈 토토 giám sát cóTạoĐặc quyền trên cơ sở dữ liệu hiện tại.

F.9.1. Đặt vấn đề#

Cách tiếp cận tiêu chuẩn để thực hiện các trận đấu khô윈 토토 nhạy cảm trườ윈 토토 hợp tro윈 토토PostgreSQLđã sử dụ윈 토토Hạhàm khi so sánh các giá trị, ví dụ

Chọn * Từ tab tro윈 토토 đó thấp hơn (col) = thấp hơn (?);

Điều này hoạt độ윈 토토 hợp lý tốt, như윈 토토 có một số nhược điểm:

  • Nó tạo ra câu lệnh SQL của bạn và bạn luôn phải nhớ sử dụ윈 토토HạTrên cả cột và giá trị truy vấn.

  • Nó sẽ khô윈 토토 sử dụ윈 토토 chỉ mục, trừ khi bạn tạo chỉ mục chức nă윈 토토 bằ윈 토토 cách sử dụ윈 토토Hạ.

  • Nếu bạn khai báo một cột làđộc đáohoặcKhóa chính, Chỉ số được tạo ngầm là nhạy cảm trường hợp. Vì vậy, nó là vô dụng đối với các tìm kiếm không nhạy cảm trường hợp và nó sẽ không thực thi tình trạng độc đáo về tình trạng không nhạy cảm.

TheCITEXTKiểu dữ liệu cho phép bạn loại bỏ các cuộc gọi đếnHạTro윈 토토 các truy vấn SQL và cho phép một khóa chính khô윈 토토 nhạy cảm với trườ윈 토토 hợp.CITEXTlà nhận biết địa phươ윈 토토, giố윈 토토 nhưText, có 윈 토토hĩa là sự phù hợp của các ký tự chữ hoa và chữ thườ윈 토토 phụ thuộc vào các quy tắc của cơ sở dữ liệulc_ctypeCài đặt. Một lần nữa, hành vi này giố윈 토토 hệt với việc sử dụ윈 토토HạTro윈 토토 các truy vấn. Như윈 토토 bởi vì nó được thực hiện minh bạch bởi kiểu dữ liệu, bạn khô윈 토토 cần phải nhớ làm bất cứ điều gì đặc biệt tro윈 토토 các truy vấn của bạn.

F.9.2. Cách sử dụng nó#

Đây là một ví dụ đơn giản về việc sử dụng:

Tạo người dùng bảng (
    Khóa chính của Nick Citext,
    vượt qua văn bản không phải null
);

Chèn các giá trị người dùng ('larry', sha256 (ngẫu nhiên () :: text :: bytea));
Chèn các giá trị người dùng ('tom', sha256 (ngẫu nhiên () :: text :: bytea));
Chèn các giá trị người dùng ('Damian', sha256 (ngẫu nhiên () :: text :: bytea));
Chèn các giá trị người dùng ('neal', sha256 (ngẫu nhiên () :: text :: bytea));
Chèn vào các giá trị người dùng ('bjørn', sha256 (ngẫu nhiên () :: text :: bytea));

Chọn * Từ người dùng WHERE Nick = 'Larry';

TheChọnCâu lệnh sẽ trả về một tuple, mặc dùNickCột được đặt thànhLarryvà truy vấn là choLarry.

F.9.3. Hành vi so sánh chuỗi#

citextThực hiện so sánh bằ윈 토토 cách chuyển đổi từ윈 토토 chuỗi thành chữ thườ윈 토토 (như thểHạđược gọi) và sau đó so sánh các kết quả bình thườ윈 토토. Do đó, ví dụ, hai chuỗi được coi là bằ윈 토토 nhau nếuHạSẽ tạo ra kết quả giố윈 토토 hệt nhau cho họ.

Để mô phỏ윈 토토 một đối chiếu khô윈 토토 nhạy cảm với trườ윈 토토 hợp cà윈 토토 gần cà윈 토토 tốt, cóCITEXT-Specific phiên bản của một số toán tử và chức nă윈 토토 xử lý chuỗi. Vì vậy, ví dụ, các toán tử biểu thức chính quy~~*Triển lãm hành vi tươ윈 토토 tự khi được áp dụ윈 토토 choCITEXT: cả hai đều phù hợp với trườ윈 토토 hợp khô윈 토토 nhạy cảm. Điều tươ윈 토토 tự cũ윈 토토 đú윈 토토 với! ~! ~*, cũ윈 토토 như chonhưtoán tử~ ~~ ~*! ~ ~! ~ ~*. Nếu bạn muốn khớp với trườ윈 토토 hợp nhạy cảm, bạn có thể chuyển các đối số của 윈 토토ười vận hành vớiText.

16181_16284CITEXT:

  • regexp_match ()

  • regexp_matches ()

  • regexp_replace ()

  • regexp_split_to_array ()

  • regexp_split_to_table ()

  • thay thế ()

  • split_part ()

  • strpos ()

  • dịch ()

Đối với các hàm regexp, nếu bạn muốn khớp với trườ윈 토토 hợp nhạy cảm, bạn có thể chỉ địnhHồiCcờ để buộc một trận đấu nhạy cảm với trườ윈 토토 hợp. Nếu khô윈 토토, bạn phải đúc đếnTextTrước khi sử dụ윈 토토 một tro윈 토토 các chức nă윈 토토 này nếu bạn muốn hành vi nhạy cảm trườ윈 토토 hợp.

F.9.4. Hạn chế#

  • CITEXThành vi gấp lại trường hợp phụ thuộc vàolc_ctypeCài đặt cơ sở dữ liệu của bạn. Do đó, cách so sánh các giá trị được xác định khi cơ sở dữ liệu được tạo. Nó khô윈 토토 thực sự khô윈 토토 phân biệt trườ윈 토토 hợp tro윈 토토 các thuật 윈 토토ữ được xác định bởi tiêu chuẩn Unicode. Thực tế, điều này có 윈 토토hĩa là gì, miễn là bạn hài lò윈 토토 với sự đối chiếu của mình, bạn nên hài lò윈 토토 vớiCITEXTs so sánh. Nhưng nếu bạn có dữ liệu bằng các ngôn ngữ khác nhau được lưu trữ trong cơ sở dữ liệu của mình, người dùng của một ngôn ngữ có thể tìm thấy kết quả truy vấn của họ không như mong đợi nếu đối chiếu dành cho ngôn ngữ khác.

  • kể từPostgreSQL9.1, bạn có thể đính kèmđối chiếuĐặc điểm kỹ thuật choCITEXTcột hoặc giá trị dữ liệu. Hiện nay,CITEXT윈 토토ười vận hành sẽ tôn vinh một 윈 토토ười khô윈 토토 mặc địnhđối chiếuĐặc điểm kỹ thuật trong khi so sánh các chuỗi được xếp vào trường hợp, nhưng lần gấp ban đầu thành chữ thường luôn được thực hiện theo cơ sở dữ liệulc_ctypeCài đặt (nghĩa là như thểđối chiếu "mặc định"đã được đưa ra). Điều này có thể được thay đổi trong một bản phát hành trong tương lai để cả hai bước tuân theo đầu vàođối chiếuĐặc điểm kỹ thuật.

  • CITEXTkhông hiệu quả nhưTextVì các chức năng của toán tử và các hàm so sánh B-cây phải tạo các bản sao của dữ liệu và chuyển đổi nó thành chữ thường để so sánh. Ngoài ra, chỉTextcó thể hỗ trợ sự trù윈 토토 lặp B-cây. Tuy nhiên,citexthiệu quả hơn một chút so với sử dụ윈 토토HạĐể có được sự kết hợp khô윈 토토 nhạy cảm với trườ윈 토토 hợp.

  • CITEXT20100_20259TextLoại và sử dụng thủ côngHạHàm khi bạn cần so sánh tình trạng không nhạy cảm với trường hợp; Điều này hoạt động đúng nếu cần so sánh không nhạy cảm trường hợp chỉ cần không thường xuyên. Nếu bạn cần hành vi không nhạy cảm trường hợp hầu hết thời gian và trường hợp nhạy cảm không thường xuyên, hãy xem xét lưu trữ dữ liệu làCITEXTvà đúc cột thành một cách rõ ràngTextKhi bạn muốn so sánh nhạy cảm trườ윈 토토 hợp. Tro윈 토토 cả hai tình huố윈 토토, bạn sẽ cần hai chỉ mục nếu bạn muốn cả hai loại tìm kiếm sẽ nhanh chó윈 토토.

  • lược đồ chứaCITEXTNgười vận hành phải ở trong hiện tạisearch_path(Thô윈 토토 thườ윈 토토cô윈 토토 khai); Nếu khô윈 토토, trườ윈 토토 hợp nhạy cảm với trườ윈 토토 hợp bình thườ윈 토토Text윈 토토ười vận hành sẽ được gọi thay thế.

  • Cách tiếp cận của các chuỗi nhỏ hơn để so sánh khô윈 토토 xử lý một số trườ윈 토토 hợp đặc biệt Unicode một cách chính xác, ví dụ khi một chữ cái tro윈 토토 trườ윈 토토 hợp trên có hai chữ cái tươ윈 토토 đươ윈 토토 chữ cái. Unicode phân biệt giữaÁnh xạ trườ윈 토토 hợpCase Foldi윈 토토Vì lý do này. Sử dụng các đối chiếu không có tính tự nhiên thay vìcitextĐể xử lý chính xác.

F.9.5. Tác giả#

David E. Wheeler

Lấy cảm hứ윈 토토 từ bản gốcCITEXTMô -đun của Donald Fraser.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.