PostgreSQL: soi kèo bóng đá truoctran liệu: 9 | |||
---|---|---|---|
prev | UP | Chương 22. Bản địa hóa | Tiếp theo |
Tính năng đối soi kèo bóng đá truoctran 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_collatevàlc_ctypeCài đặt của cơ sở dữ liệu không thể thay đổi sau khi tạo.
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 soi kèo bóng đá truoctran. (Các kiểu dữ liệu có chứa có thể tích hợp làText, VarcharvàChar. 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 soi kèo bóng đá truoctran cột, sự hợp tác của biểu thức là sự đối soi kèo bóng đá truoctran được xác định của cột.
Sự đối soi kèo bóng đá truoctran của một biểu thức có thể là"Mặc định"đối soi kèo bóng đá truoctran, 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran của biểu thức đầu vào. Điều này xảy ra, ví dụ, vớiĐặt hàng bởiCác mệnh đề và chức năng hoặc các cuộc gọi toán tử như<. Đối soi kèo bóng đá truoctran để áp dụng cho mộtĐặt hàng bởimệnh đề chỉ đơn giản là sự đối soi kèo bóng đá truoctran của phím sắp xếp. Việc đối soi kèo bóng đá truoctran để á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ên
vàinitCap
; bằng cách kết hợp các toán tử phù hợp với mẫu;to_char
và các 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran cũng được sử dụng vào thời gian phân tích.
TheĐạo hàm đối soi kèo bóng đá truoctrancủ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 soi kèo bóng đá truoctran được kết hợp khi nhiều đối soi kèo bóng đá truoctran khác nhau xuất hiện trong một biểu thức.đối soi kèo bóng đá truoctranmệnh đề được sử dụng; Tất cả các dẫn xuất đối soi kèo bóng đá truoctran khác là tiềm ẩn.
Nếu bất kỳ biểu thức đầu vào nào có đạo hàm đối soi kèo bóng đá truoctran rõ ràng, thì tất cả các đối soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran có nguồn gốc rõ ràng có mặt, đó là kết quả của sự kết hợp đối soi kèo bóng đá truoctran.
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 soi kèo bóng đá truoctran ngầm hoặc đối soi kèo bóng đá truoctran mặc định. Nếu có bất kỳ đối soi kèo bóng đá truoctran không mặc định có mặt, đó là kết quả của sự kết hợp đối soi kèo bóng đá truoctran.
Nếu có các đối soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran có nguồn gốc ngầm với đối soi kèo bóng đá truoctran mặc định. Nhưng trong
Chọn <('foo' đối soi kèo bóng đá truoctran "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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran nào sẽ áp dụng, vìAvàBCác cột có các đối soi kèo bóng đá truoctran ngầm mâu thuẫn. Kể từ<Nhà điều hành cần biết sử dụng đối soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran "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 soi kèo bóng đá truoctran.
Trụ đồ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 soi kèo bóng đá truoctran,Đặ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 soi kèo bóng đá truoctran rõ ràng:
Chọn * Từ đơn đặt hàng Test1 của A || B đối soi kèo bóng đá truoctran "FR_FR";
Một đối soi kèo bóng đá truoctran 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_Collatevàlc_ctype. (Như tên sẽ đề xuất, mục đích chính của một đối soi kèo bóng đá truoctran là đặtlc_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ó mộtlc_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 một khái niệm hơn là tạo ra một cơ sở hạ tầng khác để thiết lậplc_ctypemỗi biểu thức.) Ngoài ra, một đối soi kèo bóng đá truoctran được gắn với một mã hóa bộ ký tự (xemPhần 22.3). Cùng tên đối soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran có tênmặc định, CvàPOSIXcó sẵn. Các đối soi kèo bóng đá truoctran bổ sung có thể có sẵn tùy thuộc vào hỗ trợ hệ điều hành.mặc định16273_16298lc_collatevàlc_ctypeGiá trị được chỉ định tại thời gian tạo cơ sở dữ liệu. TheCvàPOSIXCollations Cả hai chỉ định"truyền thống C"Hành vi, chỉ trong đó các 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 một chương trình (Newlocale
và các 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran có tênde_de.utf8cho mã hóaUTF8có cả haiLC_Collatevàlc_ctypeĐặt thànhde_de.utf8. Nó cũng sẽ tạo ra một sự đối soi kèo bóng đá truoctran với.UTF8TAG bị tước tên. Vì vậy, bạn cũng có thể sử dụng đối soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran ban đầu phụ thuộc vào nền tảng.
Trong trường hợp cần đối soi kèo bóng đá truoctran có các giá trị khác nhau cholc_collatevàlc_ctype, một đối soi kèo bóng đá truoctran mới có thể được tạo bằng cách sử dụngPostgreSQL: Tài liệu: 9.5: Tạo đốilệnh. Lệnh đó cũng có thể được sử dụng để tạo một đối soi kèo bóng đá truoctran mới từ một đối soi kèo bóng đá truoctran hiện có, có thể hữu ích để có thể sử dụng tên đối soi kèo bóng đá truoctran độ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 soi kèo bóng đá truoctran sử dụng mã hóa cơ sở dữ liệu đó được quan tâm. Các mục khác trongpg_collationbị bỏ qua. Do đó, một tên đối soi kèo bóng đá truoctran 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. Nên sử dụng các tên đối soi kèo bóng đá truoctran bị tước, 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 thành mã hóa cơ sở dữ liệu khác.Mặc định, CvàPOSIXđối soi kèo bóng đá truoctran có thể được sử dụng bất kể mã hóa cơ sở dữ liệu.
PostgreSQLcoi các đối tượng đối soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran "C" <b đối soi kèo bóng đá truoctran "POSIX" từ Test1;
sẽ vẽ lỗi mặc dùCvàPOSIXCollations có những hành vi giống hệt nhau. Do đó, trộn các tên đối soi kèo bóng đá truoctran bị tước và không dải không được khuyến khích.