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ế.

23.3. Hỗ trợ bộ ký tự

Hỗ trợ bộ ký tự trongPostgreSQL11752_11942EUC |(Mã Unix mở rộng), UTF-8 và mã nội bộ Mule. Tất cả các bộ ký tự được hỗ trợ có thể được sử dụng trong suốt bởi các máy khách, nhưng một số ít không được hỗ trợ để sử dụng trong máy chủ (nghĩa là, như một mã hóa phía máy chủ).PostgreSQLCụm cơ sở dữ liệu bằng cách sử dụnginitDB. Nó có thể được ghi đè khi bạn tạ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.

Tuy nhiên, một hạn chế quan trọng là mỗi bộ ký tự của cơ sở dữ liệu phải tương thích với cơ sở dữ liệulc_ctype(Phân loại ký tự) vàLC_Collate(Sắp xếp chuỗi) Cài đặt địa phương. VìC |hoặcPosixLocale, bất kỳ bộ ký tự nào cũng được cho phép, nhưng đối với các địa phương do LIBC | cung cấp khác, chỉ có một bộ ký tự sẽ hoạt động chính xác. .

23.3.1. Bộ ký tự được hỗ trợ

Bảng 23.1Hiển thị các bộ ký tự có sẵn để sử dụng trongPostgreSQL.

Bảng 23.1.PostgreSQLBộ ký tự

tên Mô tả Ngôn ngữ Máy chủ? IC |U? byte/char Bí danh
Big5 Big Five Trung Quốc truyền thống không Không 1-2 Win950, Windows950
EUC_CN Mở rộng mã Unix-C |N Trung Quốc đơn giản C |ó C |ó 1-3
EUC |_JP C |ode unix-jp mở rộng Nhật Bản C |ó 1-3
EUC |_JIS_2004 C |ode unix-jp mở rộng, JIS x 0213 Nhật Bản C |ó Không 1-3
EUC_KR Code unix-kr mở rộng | | | C |ó 1-3
EUC_TW C |ode UNIX-TW mở rộng Trung Quốc truyền thống, Đài Loan C |ó C |ó 1-3
GB18030 Tiêu chuẩn quốc gia Trung Quốc không Không 1-4
​​GBK Tiêu chuẩn quốc gia mở rộng Trung Quốc đơn giản Không không 1-2 Win936, Windows936
ISO_8859_5 ISO 8859-5,EC |MA 113 Latin/C |yrillic C |ó 1
ISO_8859_6 ISO 8859-6,EC |MA 114 Latin/tiếng Ả Rập C |ó C |ó 1
ISO_8859_7 ISO 8859-7,ECMA 118 Latin/Hy Lạp C |ó 1
ISO_8859_8 ISO 8859-8,EC |MA 121 Latin/tiếng Do Thái 1
Johab Johab | | | (Hangul) Không Không 1-3
KOI8R KOI8-R Cyrillic (tiếng Nga) C |ó 1 KOI8
KOI8U KOI8-U C |yrillic (Ukraine) C |ó 1
Latin1 ISO 8859-1,ECMA 94 Tây Âu C |ó C |ó 1 ISO88591
Latin2 ISO 8859-2,EC |MA 94 Trung Âu C |ó C |ó 1 ISO88592
Latin3 ISO 8859-3,EC |MA 94 Nam Âu C |ó C |ó 1 ISO88593
Latin4 ISO 8859-4,EC |MA 94 Bắc Âu C |ó 1 ISO88594
Latin5 ISO 8859-9,ECMA 128 Thổ Nhĩ Kỳ C |ó C |ó 1 ISO88599
Latin6 ISO 8859-10,EC |MA 144 Nordic C |ó C |ó 1 ISO885910
Latin7 ISO 8859-13 Baltic C |ó C |ó 1 ISO885913
Latin8 ISO 8859-14 Celtic C |ó C |ó 1 ISO885914
Latin9 ISO 8859-15 Latin1 với Euro và Accent C |ó 1 ISO885915
Latin10 ISO 8859-16,ASROSR 14111 Rumani Không 1 ISO885916
Mule_Internal Mã nội bộ Mule Emacs đa ngôn ngữ Không 1-4
SJIS SHIFT JIS Nhật Bản Không không 1-2 mskanji, ShiftJis, Win932, Windows932
shift_jis_2004 SHIFT JIS, JIS X 0213 Nhật Bản Không Không 1-2
SQL_ASCII không xác định (xem văn bản) Any C |ó Không 1
UHC | Mã Hangul thống nhất Hàn Quốc Không Không 1-2 Win949, Windows949
Tiếng Nhật | | Unicode, 8-bit tất cả C |ó 1-4 Unicode
Win866 Windows CP866 C |yrillic C |ó C |ó 1 alt
Win874 Windows C |P874 Thái C |ó Không 1
Win1250 Windows CP1250 Trung Âu C |ó 1
Win1251 Windows C |P1251 C |yrillic C |ó 1 win
Win1252 Windows CP1252 Tây Âu C |ó C |ó 1
Win1253 Windows CP1253 Hy Lạp C |ó C |ó 1
Win1254 Windows C |P1254 Thổ Nhĩ Kỳ C |ó 1
Win1255 Windows C |P1255 tiếng Do Thái C |ó C |ó 1
Win1256 Windows C |P1256 Ả Rập C |ó 1
Win1257 Windows CP1257 Baltic C |ó C |ó 1
Win1258 Windows CP1258 Việt Nam C |ó C |ó 1 ABC |, TC |VN, TC |VN5712, VSCII

Không phải tất cả máy kháchAPIS 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.

TheSQL_ASC |IIC |ài đặt hoạt động khác biệt đáng kể so với các cài đặt khác. Khi bộ máy chủ được đặt làSQL_ASCII, máy chủ diễn giải các giá trị byte 0-127 theo tiêu chuẩn ASC |II, trong khi các giá trị byte 128-255 được lấy dưới dạng các ký tự không được giải thích. Không có chuyển đổi mã hóa sẽ được thực hiện khi cài đặt làSQL_ASCII. Do đó, cài đặt này không phải là một tuyên bố rằng một mã hóa cụ thể đang được sử dụng, như một tuyên bố thiếu hiểu biết về mã hóa.SQL_ASC |IIC |ài đặt vìPostgreSQLsẽ không thể giúp bạn bằng cách chuyển đổi hoặc xác thực các ký tự không phải ASC |II.

23.3.2. Đặt bộ ký tự

initDBXác định bộ ký tự mặc định (mã hóa) cho APostgreSQLC |ụm. Ví dụ,

initDB -e euc_jp

Đặt ký tự mặc định được đặt 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 các chuỗi tùy chọn dài hơn. Nếu không-ehoặc---EncodingTùy chọn được đưa ra,initDBC |ố gắng xác định mã hóa phù hợp để sử dụng dựa trên ngôn ngữ được chỉ định hoặc mặc định.

Bạn có thể chỉ định mã hóa không mặc định tại thời gian tạo cơ sở dữ liệu, miễn là mã hóa tương thích với locale đã chọn:

29926_30016

Điều này sẽ tạo cơ sở dữ liệu có tên| | |sử dụng bộ ký tựEUC |_KRvà LocaleKO_KR. Một cách khác để thực hiện điều này là sử dụng lệnh SQL này:

30305_30422

Lưu ý rằng các lệnh trên chỉ định sao chépHlinnaka |C |ơ sở dữ liệu. Khi sao chép bất kỳ cơ sở dữ liệu nào khác, cài đặt mã hóa và địa phương không thể được thay đổi từ cơ sở dữ liệu nguồn, vì điều đó có thể dẫn đến dữ liệu bị hỏng.Phần 22.3.

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 nó bằng cách sử dụngPSQL -LTùy chọn hoặc\ Llệnh.

$PSQL -LDanh sách cơ sở dữ liệu

quan trọng

Trên hầu hết các hệ điều hành hiện đại,PostgreSQLC |ó thể xác định bộ ký tự nào được ngụ ý bởilc_ctypeCài đặt và nó sẽ thực thi rằng chỉ sử dụng mã hóa cơ sở dữ liệu phù hợp. Trên các hệ thống cũ hơn, bạn có trách nhiệm đảm bảo rằng bạn sử dụng mã hóa được mong đợi bởi địa phương bạn đã chọn.

PostgreSQLsẽ cho phép Superusers tạo cơ sở dữ liệu vớiSQL_ASC |IImã hóa ngay cả khilc_ctypekhông phảiC |hoặcPOSIX. Như đã lưu ý ở trên,SQL_ASC |IIKhông thực thi rằng dữ liệu được lưu trữ trong cơ sở dữ liệu có bất kỳ mã hóa cụ thể nào và do đó, lựa chọn này đặt ra rủi ro của hành vi sai trái phụ thuộc vào địa phương. Sử dụng kết hợp các cài đặt này không được chấp nhận và một ngày nào đó có thể bị cấm hoàn toàn.

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

PostgreSQLHỗ trợ chuyển đổi bộ ký tự tự động giữa máy chủ và máy khách cho các kết hợp bộ ký tự nhất định. Thông tin chuyển đổi được lưu trữ trongpg_conversionDanh mục hệ thống.PostgreSQLđi kèm với một số chuyển đổi được xác định trước, như trongBảng 23.2. Bạn có thể tạo chuyển đổi mới bằng lệnh SQLTạo chuyển đổi.

Bảng 23.2. C |huyển đổi bộ ký tự máy khách/máy chủ

Bộ ký tự máy chủ Bộ ký tự máy khách có sẵn
Big5 Không được hỗ trợ làm mã hóa máy chủ
EUC_CN EUC |_C |N, Mule_Internal, UTF8
EUC |_JP EUC |_JP, Mule_Internal, SJIS, Tiếng Nhật | |
EUC |_JIS_2004 EUC |_JIS_2004, Shift_Jis_2004, Tiếng Nhật | |
EUC |_KR EUC |_KR, MULE_INTERNAL, Tiếng Nhật | |
EUC |_TW EUC |_TW, Big5, MULE_INTERNAL, Tiếng Nhật | |
GB18030 Không được hỗ trợ làm mã hóa máy chủ
GBK Không được hỗ trợ làm mã hóa máy chủ
ISO_8859_5 ISO_8859_5, KOI8R, Mule_Internal, Tiếng Nhật | |, Win866, Win1251
ISO_8859_6 ISO_8859_6, Tiếng Nhật | |
ISO_8859_7 ISO_8859_7, Tiếng Nhật | |
ISO_8859_8 ISO_8859_8, UTF8
Johab Không được hỗ trợ làm mã hóa máy chủ
KOI8R KOI8R, ISO_8859_5, MULE_INTERNAL, UTF8, Win866, Win1251
KOI8U KOI8U, Tiếng Nhật | |
Latin1 Latin1, MULE_INTERNAL, UTF8
Latin2 Latin2, Mule_Internal, Tiếng Nhật | |, Win1250
Latin3 Latin3, Mule_Internal, Tiếng Nhật | |
Latin4 Latin4, Mule_Internal, Tiếng Nhật | |
Latin5 Latin5, Tiếng Nhật | |
Latin6 Latin6, Tiếng Nhật | |
Latin7 Latin7, Tiếng Nhật | |
Latin8 Latin8, UTF8
Latin9 Latin9, Tiếng Nhật | |
Latin10 Latin10, Tiếng Nhật | |
MULE_INTERNAL MULE_INTERNAL, Big5, EUC |_C |N, EUC |_JP, EUC_KR, EUC |_TW, ISO_8859_5, KOI8R, Latin1đếnLatin4, SJIS, Win866, Win1250, Win1251
SJIS Không được hỗ trợ làm mã hóa máy chủ
shift_jis_2004 Không được hỗ trợ làm mã hóa máy chủ
SQL_ASC |II Bất kỳ (không có chuyển đổi nào sẽ được thực hiện)
UHC | Không được hỗ trợ làm mã hóa máy chủ
UTF8 Tất cả các mã hóa được hỗ trợ
Win866 Win866, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, Win1251
Win874 Win874, Tiếng Nhật | |
Win1250 Win1250, Latin2, Mule_Internal, UTF8
Win1251 Win1251, ISO_8859_5, KOI8R, MULE_INTERNAL, Tiếng Nhật | |, Win866
Win1252 Win1252, Tiếng Nhật | |
Win1253 Win1253, Tiếng Nhật | |
Win1254 Win1254, Tiếng Nhật | |
Win1255 Win1255, Tiếng Nhật | |
Win1256 Win1256, Tiếng Nhật | |
Win1257 Win1257, Tiếng Nhật | |
Win1258 Win1258, UTF8

Để cho phép chuyển đổi bộ ký tự tự động, bạn phải nóiPostgreSQLBộ ký tự (mã hóa) bạn muốn sử dụng trong máy khách. C |ó một số cách để thực hiện điều này:

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

    \ mã hóa SJIS
  • libpq(Phần 34.10) có các chức năng để kiểm soát mã hóa máy khách.

  • 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 lệnh SQL này:

    đặt client_encoding thành 'giá trị';

    Ngoài ra bạn có thể sử dụng cú pháp SQL tiêu chuẩ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ôi trường của khách hàng, 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ể được ghi đè bằng bất kỳ phương thức nào khác được đề cập ở trên.)

  • Sử dụng biến cấu hìnhclient_encoding. Nếuclient_encodingBiến được đặt, 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 sau đó có thể được ghi đè bằng bất kỳ phương thức nào khác được đề cập ở 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 và một số ký tự Nhật Bản được trả về không có đại diện trongLatin1- Một lỗi được báo cáo.

Nếu bộ ký tự máy khách được xác định làSQL_ASCII, C |huyển đổi mã hóa bị vô hiệu hóa, bất kể bộ ký tự của máy chủ. Giống như đối với máy chủ, sử dụngSQL_ASC |IIkhông khôn ngoan trừ khi bạn đang làm việc với dữ liệu All-ASC |II.

23.3.4. Đọc thêm

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

Xử lý thông tin C |JKV: Điện toán Trung Quốc, Nhật Bản, | | | & Việt Nam

C |hứa các giải thích chi tiết vềEUC |_JP, EUC_CN, EUC |_KR, EUC |_TW.

http: //www.unicode.org/

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

RFC 3629

UTF-8 (định dạng chuyển đổi UC |S/UNIC |ode 8 bit) được xác định ở đây.