Postgresql Tài liệu 8.0.26 | ||||
---|---|---|---|---|
Prev | Backward nhanh | Chương 20. Bản địa hóa | Chuyển tiếp nhanh | Tiếp theo |
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.
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, Latin8vàLatin10.
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_collatevàLC_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.
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).
Đâ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.
Giải thích chi tiết vềEUC_JP, EUC_CN, EUC_KR, EUC_TWxuất hiện trong phần 3.2.
Trang web của Hiệp hội Unicode
UTF-8 được xác định đây.