Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / 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 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.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 một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

cách đọc kèo bóng đá 20.2. Hỗ trợ bộ ký tự

Hỗ trợ bộ ký tự trongPostgreSQL10846_11018EUC(Mã Unix mở rộng), Unicode và mã nội bộ Mule. Tất cả các bộ ký tự có thể được sử dụng minh bạch trong toàn bộ máy chủ. (Nếu bạn sử dụng tiện ích mở rộng các chức năng từ các nguồn khác, nó phụ thuộc vào việc họ đã viết Mã của chúng một cách chính xác.) Bộ ký tự mặc định được chọn Trong khi khởi tạo của bạnPostgreSQLCụm cơ sở dữ liệu bằng cách sử dụng11451_11459. Nó có thể bị ghi đè khi bạn tạo một cơ sở dữ liệu sử dụngcreatedbhoặc bằng cách sử dụng Lệnh SQLTạo cơ sở dữ liệu. Vì vậy, bạn có thể có nhiều cơ sở dữ liệu với một bộ ký tự khác nhau.

20.2.1. Nhân vật được hỗ trợ Đặt

Bảng 20-1Hiển thị các bộ ký tự có sẵn để sử dụng trong máy chủ.

Bảng 20-1. Bộ ký tự máy chủ

tên Mô tả
SQL_ASCII ASCII
EUC_JP Nhật BảnEUC
EUC_CN Trung QuốcEUC
EUC_KR Hàn QuốcEUC
Johab Hàn QuốcEUC(cơ sở treo)
EUC_TW Đài LoanEUC
Unicode unicode (UTF-8)
Mule_Internal Mã nội bộ Mule
Latin1 ISO 8859-1/ECMA94 (Bảng chữ cái Latin số 1)
Latin2 ISO 8859-2/ECMA94 (Bảng chữ cái Latin số 2)
Latin3 ISO 8859-3/ECMA94 (Bảng chữ cái Latin số 3)
Latin4 ISO 8859-4/ECMA94 (Bảng chữ cái Latin số 4)
Latin5 ISO 8859-9/ECMA128 (Bảng chữ cái Latin số 5)
Latin6 ISO 8859-10/ECMA144 (Bảng chữ cái Latin số 6)
Latin7 ISO 8859-13 (Bảng chữ cái Latin số 7)
Latin8 ISO 8859-14 (Bảng chữ cái Latin số 8)
Latin9 ISO 8859-15 (Bảng chữ cái Latin số 9)
Latin10 ISO 8859-16/ASROSR 14111 (Bảng chữ cái Latin số 10)
ISO_8859_5 ISO 8859-5/ECMA113 (Latin/Cyrillic)
ISO_8859_6 ISO 8859-6/ECMA114 (Latin/tiếng Ả Rập)
ISO_8859_7 ISO 8859-7/ECMA118 (Latin/Hy Lạp)
ISO_8859_8 ISO 8859-8/ECMA121 (tiếng Latin/tiếng Do Thái)
KOI8 KOI8-r (u)
Alt Windows CP866
Win874 Windows CP874 (Thái)
Win1250 Windows CP1250
Win Windows CP1251
Win1256 Windows CP1256 (tiếng Ả Rập)
TCVN TCVN-5712/Windows CP1258 (Việt Nam)

quan trọng:trướcPostgreSQL7.2,Latin5có nghĩa là ISO 8859-5. Từ 7.2 TRÊN,Latin5Phương tiện ISO 8859-9. Nếu như bạn có mộtLatin5Cơ sở dữ liệu được tạo Vào ngày 7.1 trở lên và muốn di chuyển đến 7.2 trở lên, bạn nên cẩn thận về sự thay đổi này.

không phải tất cảAPIS Hỗ trợ tất cả Các bộ ký tự được liệt kê. Ví dụ:PostgreSQLTrình điều khiển JDBC không hỗ trợMULE_INTERNAL, Latin6, Latin8Latin10.

20.2.2. Đặt bộ ký tự

initDBXác định mặc định Bộ ký tự cho mộtPostgreSQLCụm. Ví dụ,

initDB -e euc_jp

Đặt bộ ký tự mặc định (mã hóa) thànhEUC_JP(Mã Unix mở rộng cho tiếng Nhật). Bạn có thể sử dụng---Encodingthay vì-eNếu bạn thích gõ tùy chọn dài hơn chuỗi. Nếu không-ehoặc18747_18759Tùy chọn được đưa ra,SQL_ASCIIđược sử dụng.

Bạn có thể tạo cơ sở dữ liệu với một ký tự khác bộ:

createdb -e euc_kr Hàn Quốc

Điều này sẽ tạo cơ sở dữ liệu có tênHàn Quốcsử dụng bộ ký tựEUC_KR19108_19174

Tạo cơ sở dữ liệu Hàn Quốc với mã hóa 'euc_kr';

Mã hóa cho cơ sở dữ liệu được lưu trữ trong danh mục hệ thốngpg_database. Bạn có thể thấy rằng bằng cách sử dụng The-L19434_19451\ Llệnh củaPSQL.

$PSQL -LDanh sách cơ sở dữ liệu
   Cơ sở dữ liệu |  Chủ sở hữu |   Mã hóa    
---------------+---------+---------------
 euc_cn | T-ishii | EUC_CN
 EUC_JP | T-ishii | EUC_JP
 euc_kr | T-ishii | EUC_KR
 euc_tw | T-ishii | EUC_TW
 MULE_ INITERNAL | T-ishii | MULE_ INITERNAL
 hồi quy | T-ishii | SQL_ASCII
 Template1 | T-ishii | EUC_JP
 Kiểm tra | T-ishii | EUC_JP
 Unicode | T-ishii | Unicode
(9 hàng)

Quan trọng:Mặc dù bạn có thể chỉ định bất kỳ mã hóa nào Bạn muốn cho một cơ sở dữ liệu, không khôn ngoan khi chọn mã hóa Đó không phải là những gì được mong đợi bởi địa phương bạn có đã chọn. Thelc_collateLC_CTYPECài đặt ngụ ý a mã hóa cụ thể và các hoạt động phụ thuộc vào địa phương (như vì sắp xếp) có khả năng giải thích sai dữ liệu trong một Mã hóa không tương thích.

Vì các cài đặt địa phương này bị đóng băng bởiinitDB, Tính linh hoạt rõ ràng để sử dụng các mã hóa khác nhau trong các cơ sở dữ liệu khác nhau của một cụm là nhiều lý thuyết hơn thực tế. Có khả năng là những Các cơ chế sẽ được xem xét lại trong các phiên bản tương lai củaPostgreSQL.

Một cách để sử dụng nhiều mã hóa một cách an toàn là đặt Locale toChoặcPosixtronginitDB, do đó vô hiệu hóa bất kỳ địa phương thực nào nhận thức.

20.2.3. Chuyển đổi bộ ký tự tự động giữa máy chủ và Khách hàng

PostgreSQLHỗ trợ Chuyển đổi bộ ký tự tự động giữa máy chủ và máy khách cho một số bộ ký tự nhất định. Thông tin chuyển đổi là được lưu trữ trongpg_conversionHệ thống danh mục. Bạn có thể tạo một chuyển đổi mới bằng cách sử dụng SQL yêu cầuTạo chuyển đổi. PostgreSQLđi kèm với một số Chuyển đổi được xác định trước. Chúng được liệt kê trongBảng 20-2.

Bảng 20-2. Bộ ký tự máy khách/máy chủ Chuyển đổi

Bộ ký tự máy chủ Bộ ký tự máy khách có sẵn
SQL_ASCII SQL_ASCII, Unicode, Mule_Internal
EUC_JP EUC_JP, SJIS, Unicode, Mule_Internal
EUC_CN EUC_CN, Unicode, Mule_Internal
EUC_KR EUC_KR, unicode, Mule_Internal
Johab Johab, unicode
EUC_TW EUC_TW, Big5, unicode, Mule_Internal
Latin1 Latin1, Unicode Mule_Internal
Latin2 Latin2, Win1250, unicode, Mule_Internal
Latin3 Latin3, unicode, Mule_Internal
Latin4 Latin4, unicode, Mule_Internal
Latin5 Latin5, Unicode
Latin6 Latin6, Unicode, Mule_Internal
Latin7 Latin7, unicode, Mule_Internal
Latin8 Latin8, Unicode, Mule_Internal
Latin9 Latin9, Unicode, Mule_Internal
Latin10 Latin10, Unicode, Mule_Internal
26317_26329 ISO_8859_5, 26425_26434, Mule_Internal, win, alt, KOI8
ISO_8859_6 ISO_8859_6, Unicode
ISO_8859_7 ISO_8859_7, Unicode
ISO_8859_8 ISO_8859_8, Unicode
unicode EUC_JP, SJIS, EUC_KR, UHC, Johab, EUC_CN, GBK, EUC_TW, Big5, Latin1đếnLatin10, ISO_8859_5, ISO_8859_6, ISO_8859_7, ISO_8859_8, Win, Alt, KOI8, Win1256, TCVN, Win874, GB18030, Win1250
Mule_Internal EUC_JP, SJIS, EUC_KR, EUC_CN, EUC_TW, Big5, Latin1đếnLatin5, win, ALT, Win1250, Big5, ISO_8859_5, KOI8
KOI8 ISO_8859_5, Win, Alt, KOI8, Unicode, Mule_Internal
Alt ISO_8859_5, Win, Alt, KOI8, Unicode, Mule_Internal
Win874 Win874, Unicode
Win1250 29980_29988, Win1250, Unicode, MULE_INTERNAL
win ISO_8859_5, Win, Alt, KOI8, Unicode, MULE_INTERNAL
Win1256 Win1256, unicode
TCVN TCVN, Unicode

Để cho phép chuyển đổi bộ ký tự tự động, bạn có để nóiPostgreSQL31051_31170

  • Sử dụng\ mã hóalệnh trongPSQL. \ mã hóaCho phép bạn thay đổi máy khách mã hóa khi đang bay. Ví dụ: để thay đổi mã hóa thànhSJIS, loại:

    \ mã hóa SJIS
  • sử dụnglibpqchức năng.\ mã hóathực tế gọipqsetClientEncoding ()cho nó mục đích.

    31824_31859Conn, const char *mã hóa);

    WHEREConnlà a kết nối với máy chủ vàmã hóaLà mã hóa bạn muốn sử dụng. Nếu hàm đặt thành công mã hóa, nó trả về 0, nếu không -1. Mã hóa hiện tại cho điều này Kết nối có thể được xác định bằng cách sử dụng:

    int pqClientEncoding (const pgconn *Conn);

    Lưu ý rằng nó trả về ID mã hóa, không phải là biểu tượng Chuỗi nhưEUC_JP. Để chuyển đổi ID mã hóa thành tên mã hóa, bạn có thể sử dụng:

    char *pg_encoding_to_char (intmã hóa_id);
  • Sử dụngđặt client_encoding thành. Đặt mã hóa máy khách có thể được thực hiện với SQL này yêu cầu:

    đặt client_encoding thành 'Value';

    Ngoài ra bạn có thể sử dụng cú pháp SQL tiêu chuẩn hơnĐặt têncho mục đích này:

    Đặt tên 'Value';

    Để truy vấn mã hóa máy khách hiện tại:

    hiển thị client_encoding;

    Để trở lại mã hóa mặc định:

    Đặt lại client_encoding;
  • Sử dụngpgclientencoding. Nếu Biến môi trườngPGClientencodingđược xác định trong máy khách môi trường, mã hóa máy khách đó được chọn tự động Khi kết nối với máy chủ được thực hiện. (Điều này có thể sau đó được ghi đè bằng bất kỳ phương thức nào khác đã đề cập ở trên.)

  • Sử dụng biến cấu hìnhclient_encoding. Nếuclient_encodingBiến là đặt, mã hóa máy khách đó được tự động chọn khi Kết nối với máy chủ được thực hiện. (Điều này sau đó có thể là ghi đè bằng cách sử dụng bất kỳ phương pháp nào khác được đề cập bên trên.)

Nếu không thể chuyển đổi một ký tự cụ thể - Giả sử bạn đã chọnEUC_JPcho máy chủ vàLatin1Đối với máy khách, sau đó Một số ký tự Nhật Bản không thể được chuyển đổi thànhLatin1- Nó được chuyển đổi thành thập lục phân của nó giá trị byte trong ngoặc đơn, ví dụ:(826c).

20.2.4. Đọc thêm

Đây là những nguồn tốt để bắt đầu tìm hiểu về các loại khác nhau của các hệ thống mã hóa.

ftp: //ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf

Giải thích chi tiết vềEUC_JP, EUC_CN, EUC_KR, EUC_TWxuất hiện trong phần 3.2.

http: //www.unicode.org/

Trang web của Hiệp hội Unicode

RFC 2044

UTF-8 được xác định đây.