Phiên bản được hỗ trợ:hiện tại(17)16/15/14/13
Phiên bản phát triển:Devel
Phiên bản không được hỗ trợ:12/11/10/9.6/9.5/9.4/9.3/9.2/9.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng tỷ lệ kèo bóng đá trang chohiện tạiPhiên bản hoặc một trong tỷ lệ kèo bóng đá phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

23.2. Hỗ trợ đối tỷ lệ kèo bóng đá

Tính năng đối tỷ lệ kèo bóng đá cho phép chỉ định hành vi phân loại ký tự và sắp xếp của dữ liệu trên mỗi cột hoặc thậm chí là hoạt động. Điều này làm giảm bớt hạn chế rằnglc_collatelc_ctypeCài đặt của cơ sở dữ liệu không thể thay đổi sau khi tạo.

23.2.1. tỷ lệ kèo bóng đá khái niệm

Về mặt khái niệm, mọi biểu thức của một loại dữ liệu có ghép đều có một sự đối tỷ lệ kèo bóng đá. (Các kiểu dữ liệu có chứa có thể tích hợp làText,VarcharChar. Các loại cơ sở do người dùng xác định cũng có thể được đánh dấu có thể có được kết hợp, và tất nhiên một miền trên một loại dữ liệu có thể có được có thể có được.) Nếu biểu thức là một tham tỷ lệ kèo bóng đá cột, sự hợp tác của biểu thức là sự đối tỷ lệ kèo bóng đá được xác định của cột.

Sự đối tỷ lệ kèo bóng đá của một biểu thức có thể là"Mặc định"đối tỷ lệ kèo bóng đá, có nghĩa là các cài đặt địa phương được xác định cho cơ sở dữ liệu. Cũng có thể đối tỷ lệ kèo bóng đá của một biểu thức không được xác định.

Khi hệ thống cơ sở dữ liệu phải thực hiện đơn đặt hàng hoặc phân loại ký tự, nó sử dụng đối tỷ lệ kèo bóng đá của biểu thức đầu vào. Điều này xảy ra, ví dụ, vớiĐặt hàng bởitỷ lệ kèo bóng đá mệnh đề và chức năng hoặc tỷ lệ kèo bóng đá cuộc gọi toán tử như<. Đối tỷ lệ kèo bóng đá để áp dụng cho mộtĐặt hàng bởimệnh đề chỉ đơn giản là sự đối tỷ lệ kèo bóng đá của phím sắp xếp. Việc đối tỷ lệ kèo bóng đá để áp dụng cho một chức năng hoặc cuộc gọi toán tử được lấy từ các đối số, như được mô tả dưới đây.Hạ,trêninitCap; bằng cách kết hợp tỷ lệ kèo bóng đá toán tử phù hợp với mẫu;to_charvà tỷ lệ kèo bóng đá chức năng liên quan.

Đối với một cuộc gọi chức năng hoặc toán tử, đối tỷ lệ kèo bóng đá có nguồn gốc bằng cách kiểm tra các đối số đối số được sử dụng tại thời điểm chạy để thực hiện thao tác được chỉ định. Nếu kết quả của chức năng hoặc lệnh gọi toán tử là loại dữ liệu có thể kết hợp, thì đối tỷ lệ kèo bóng đá cũng được sử dụng vào thời gian phân tích.

TheĐạo hàm đối tỷ lệ kèo bóng đácủa một biểu thức có thể được ẩn hoặc rõ ràng. Sự khác biệt này ảnh hưởng đến cách các đối tỷ lệ kèo bóng đá được kết hợp khi nhiều đối tỷ lệ kèo bóng đá khác nhau xuất hiện trong một biểu thức.đối tỷ lệ kèo bóng đámệnh đề được sử dụng; Tất cả các dẫn xuất đối tỷ lệ kèo bóng đá khác là tiềm ẩn.

  1. Nếu bất kỳ biểu thức đầu vào nào có đạo hàm đối tỷ lệ kèo bóng đá rõ ràng, thì tất cả các đối tỷ lệ kèo bóng đá có nguồn gốc rõ ràng giữa các biểu thức đầu vào phải giống nhau, nếu không một lỗi được nêu ra. Nếu có bất kỳ đối tỷ lệ kèo bóng đá có nguồn gốc rõ ràng có mặt, đó là kết quả của sự kết hợp đối tỷ lệ kèo bóng đá.

  2. Nếu không, tất cả các biểu thức đầu vào phải có cùng một đạo hàm đối tỷ lệ kèo bóng đá ngầm hoặc đối tỷ lệ kèo bóng đá mặc định. Nếu có bất kỳ đối tỷ lệ kèo bóng đá không mặc định có mặt, đó là kết quả của sự kết hợp đối tỷ lệ kèo bóng đá.

  3. Nếu có các đối tỷ lệ kèo bóng đá ngầm không mặc định xung đột giữa các biểu thức đầu vào, thì sự kết hợp được coi là có đối tỷ lệ kèo bóng đá không xác định. Đây không phải là một điều kiện lỗi trừ khi chức năng cụ thể được gọi đòi hỏi kiến ​​thức về đối tỷ lệ kèo bóng đá mà nó nên áp dụng.

Ví dụ, hãy xem xét định nghĩa bảng này:

Tạo bảng Test1 (

Sau đó trong

Chọn <'foo' từ Test1;

The<So sánh được thực hiện theode_deQuy tắc, bởi vì biểu thức kết hợp một đối tỷ lệ kèo bóng đá có nguồn gốc ngầm với đối tỷ lệ kèo bóng đá mặc định. Nhưng trong

Chọn <('foo' đối tỷ lệ kèo bóng đá "FR_FR") từ Test1;

So sánh được thực hiện bằng cách sử dụngFR_FRQuy tắc, bởi vì dẫn xuất đối tỷ lệ kèo bóng đá rõ ràng ghi đè lên sự ngầm. Hơn nữa, đã cho

Chọn A <B từ Test1;

Trình phân tích cú pháp không thể xác định đối tỷ lệ kèo bóng đá nào sẽ áp dụng, vìABCác cột có các đối tỷ lệ kèo bóng đá ngầm mâu thuẫn. Kể từ<Nhà điều hành cần biết sử dụng đối tỷ lệ kèo bóng đá nào, điều này sẽ dẫn đến lỗi. Lỗi có thể được giải quyết bằng cách đính kèm trình xác định đối tỷ lệ kèo bóng đá rõ ràng vào biểu thức đầu vào, do đó:

Chọn A <B Collate "DE_DE" từ Test1;

hoặc tương đương

Chọn một đối tỷ lệ kèo bóng đá "de_de" <b từ test1;

Mặt khác, trường hợp tương tự về mặt cấu trúc

Chọn A || B từ Test1;

không dẫn đến lỗi, vì||Nhà điều hành không quan tâm đến các đối thủ: Kết quả của nó là như nhau bất kể đối tỷ lệ kèo bóng đá.

Trình tỷ lệ kèo bóng đá được gán cho chức năng hoặc biểu thức đầu vào kết hợp của toán tử cũng được coi là áp dụng cho kết quả của hàm hoặc toán tử, nếu hàm hoặc toán tử cung cấp kết quả của loại dữ liệu có thể ghép. Vì vậy, trong

Chọn * Từ đơn đặt hàng Test1 của A || 'foo';

Đặt hàng sẽ được thực hiện theode_deQuy tắc. Nhưng truy vấn này:

Chọn * Từ đơn đặt hàng Test1 của A || B;

dẫn đến lỗi, vì mặc dù||Nhà điều hành không cần biết đối tỷ lệ kèo bóng đá,Đặt hàng bởimệnh đề không. Như trước đây, xung đột có thể được giải quyết với một trình xác định đối tỷ lệ kèo bóng đá rõ ràng:

Chọn * Từ đơn đặt hàng Test1 của A || B đối tỷ lệ kèo bóng đá "FR_FR";

23.2.2. Quản lý đối tỷ lệ kèo bóng đá

Một đối tỷ lệ kèo bóng đá là một đối tượng Lược đồ SQL ánh xạ tên SQL cho các địa phương hệ điều hành. Cụ thể, nó ánh xạ vào sự kết hợp củaLC_Collatelc_ctype. (Như tên sẽ đề xuất, mục đích chính của một đối tỷ lệ kèo bóng đá là đặt​​lc_collate, kiểm soát thứ tự sắp xếp. Nhưng nó hiếm khi cần thiết trong thực tế để có tỷ lệ kèo bóng đálc_ctypeCài đặt khác vớilc_collate, vì vậy sẽ thuận tiện hơn khi thu thập những điều này theo tỷ lệ kèo bóng đá khái niệm hơn là tạo ra tỷ lệ kèo bóng đá cơ sở hạ tầng khác để thiết lậplc_ctypemỗi biểu thức.) Ngoài ra, một đối tỷ lệ kèo bóng đá được gắn với một mã hóa bộ ký tự (xemPhần 23.3). Cùng tên đối tỷ lệ kèo bóng đá có thể tồn tại cho các mã hóa khác nhau.

Trên tất cả các nền tảng, các đối tỷ lệ kèo bóng đá có tênmặc định,CPOSIXcó sẵn. Các đối tỷ lệ kèo bóng đá bổ sung có thể có sẵn tùy thuộc vào hỗ trợ hệ điều hành.mặc định16273_16298lc_collatelc_ctypeGiá trị được chỉ định tại thời gian tạo cơ sở dữ liệu. TheCPOSIXCollations Cả hai chỉ định"truyền thống C"Hành vi, chỉ trong đó tỷ lệ kèo bóng đá chữ cái ASCII"A"qua"Z"được coi là chữ cái và việc sắp xếp được thực hiện hoàn toàn theo giá trị byte mã ký tự.

Nếu hệ điều hành cung cấp hỗ trợ sử dụng nhiều địa phương trong tỷ lệ kèo bóng đá chương trình (Newlocalevà tỷ lệ kèo bóng đá chức năng liên quan), sau đó khi cụm cơ sở dữ liệu được khởi tạo,initDBđiền vào danh mục hệ thốngpg_collationVới các đối tỷ lệ kèo bóng đá dựa trên tất cả các địa phương mà nó tìm thấy trên hệ điều hành tại thời điểm đó. Ví dụ: hệ điều hành có thể cung cấp một địa phương có tênde_de.utf8.initDBSau đó sẽ tạo một đối tỷ lệ kèo bóng đá có tênde_de.utf8cho mã hóaUTF8có cả haiLC_Collatelc_ctypeĐặt thànhde_de.utf8. Nó cũng sẽ tạo ra một sự đối tỷ lệ kèo bóng đá với.UTF8TAG bị tước tên. Vì vậy, bạn cũng có thể sử dụng đối tỷ lệ kèo bóng đá dưới tênde_de, ít cồng kềnh hơn để viết và làm cho tên ít phụ thuộc vào mã hóa. Lưu ý rằng, tuy nhiên, tập hợp các tên đối tỷ lệ kèo bóng đá ban đầu phụ thuộc vào nền tảng.

Trong trường hợp cần đối tỷ lệ kèo bóng đá có các giá trị khác nhau cholc_collatelc_ctype, một đối tỷ lệ kèo bóng đá mới có thể được tạo bằng cách sử dụngTạo đối tỷ lệ kèo bóng đálệnh. Lệnh đó cũng có thể được sử dụng để tạo một đối tỷ lệ kèo bóng đá mới từ một đối tỷ lệ kèo bóng đá hiện có, có thể hữu ích để có thể sử dụng tên đối tỷ lệ kèo bóng đá độc lập với hệ điều hành trong các ứng dụng.

Trong bất kỳ cơ sở dữ liệu cụ thể nào, chỉ các đối tỷ lệ kèo bóng đá sử dụng mã hóa cơ sở dữ liệu đó được quan tâm. Các mục khác trong​​pg_collationbị bỏ qua. Do đó, một tên đối tỷ lệ kèo bóng đá bị tước nhưde_decó thể được coi là duy nhất trong một cơ sở dữ liệu nhất định mặc dù nó sẽ không phải là duy nhất trên toàn cầu. Việc sử dụng các tên đối tỷ lệ kèo bóng đá bị tước được khuyến nghị, vì nó sẽ làm cho một điều bạn cần thay đổi ít hơn nếu bạn quyết định thay đổi sang mã hóa cơ sở dữ liệu khác.Mặc định,CPOSIXđối tỷ lệ kèo bóng đá có thể được sử dụng bất kể mã hóa cơ sở dữ liệu.

PostgreSQLcoi các đối tượng đối tỷ lệ kèo bóng đá khác biệt là không tương thích ngay cả khi chúng có các thuộc tính giống hệt nhau. Do đó, ví dụ,

Chọn một đối tỷ lệ kèo bóng đá "C" <b đối tỷ lệ kèo bóng đá "POSIX" từ Test1;

sẽ rút lỗi mặc dùCPOSIXCollations có những hành vi giống hệt nhau. Do đó, trộn các tên đối tỷ lệ kèo bóng đá bị tước và không dải không được khuyến khích.