Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 22. Bản địa hóa | Tiếp theo |
Hỗ trợ bộ ký tự trongPostgreSQLCho phép bạn lưu trữ văn bản trong một nhiều bộ ký tự (còn được gọi là mã hóa), bao gồm cả Các bộ ký tự một byte như sê-ri ISO 8859 và Các bộ ký tự nhiều byte nhưEUC10932_11209PostgreSQLCụm cơ sở dữ liệu bằng cách sử dụnginitDB. Nó có thể bị ghi đè khi bạn tạo một cơ sở dữ liệu, do đó bạn có thể có nhiều cơ sở dữ liệu với một cơ sở dữ liệu khác nhau bộ ký tự.
Tuy nhiên, một hạn chế quan trọng là mỗi cơ sở dữ liệu Bộ ký tự 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 thứ tự) Cài đặt địa phương. VìChoặ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 khác ở đó chỉ là một bộ ký tự sẽ hoạt động chính xác. (Trên Windows, Tuy nhiên, mã hóa UTF-8 có thể được sử dụng với bất kỳ địa phương nào.)
Bảng 22-1Hiển thị Bộ ký tự có sẵn để sử dụng trongPostgreSQL.
Bảng 22-1.PostgreSQLbộ ký tự
tên | Mô tả | Ngôn ngữ | máy chủ? | byte/char | Bí danh |
---|---|---|---|---|---|
Big5 | Big Five | Trung Quốc truyền thống | không | 1-2 | Win950, Windows950 |
EUC_CN | Mã UNIX-CN mở rộng | Trung Quốc đơn giản | Có | 1-3 | |
EUC_JP | Code Unix-JP mở rộng | Nhật Bản | Có | 1-3 | |
EUC_JIS_2004 | Code unix-jp mở rộng, JIS x 0213 | Nhật Bản | Có | 1-3 | |
EUC_KR | Code unix-kr mở rộng | Hàn Quốc | Có | 1-3 | |
EUC_TW | Code unix-TW mở rộng | Trung Quốc truyền thống, Đài Loan | Có | 1-3 | |
GB18030 | Tiêu chuẩn quốc gia | Trung Quốc | Không | 1-4 | |
GBK | Tiêu chuẩn quốc gia mở rộng | Trung Quốc đơn giản | 13837_13841 | 1-2 | Win936, Windows936 |
ISO_8859_5 | ISO 8859-5,ECMA 113 | Latin/Cyrillic | Có | 1 | |
ISO_8859_6 | ISO 8859-6,ECMA 114 | Latin/tiếng Ả Rập | Có | 1 | |
ISO_8859_7 | ISO 8859-7,ECMA 118 | Latin/Hy Lạp | Có | 1 | |
ISO_8859_8 | ISO 8859-8,ECMA 121 | Latin/tiếng Do Thái | Có | 1 | |
Johab | Johab | Hàn Quốc (Hangul) | không | 1-3 | |
KOI8R | KOI8-R | Cyrillic (tiếng Nga) | Có | 1 | KOI8 |
KOI8U | KOI8-U | Cyrillic (Ukraine) | Có | 1 | |
Latin1 | ISO 8859-1,ECMA 94 | Tây Âu | Có | 1 | ISO88591 |
Latin2 | ISO 8859-2,ECMA 94 | Trung Âu | Có | 1 | 15601_15611 |
Latin3 | ISO 8859-3,ECMA 94 | Nam Âu | Có | 1 | ISO88593 |
Latin4 | ISO 8859-4,ECMA 94 | Bắc Âu | Có | 1 | ISO88594 |
Latin5 | ISO 8859-9,ECMA 128 | Thổ Nhĩ Kỳ | Có | 1 | ISO88599 |
Latin6 | ISO 8859-10,ECMA 144 | Nordic | Có | 1 | ISO885910 |
Latin7 | ISO 8859-13 | Baltic | Có | 1 | ISO885913 |
Latin8 | ISO 8859-14 | Celtic | Có | 1 | ISO885914 |
Latin9 | ISO 8859-15 | Latin1 với Euro và Accent | Có | 1 | ISO885915 |
Latin10 | ISO 8859-16,ASROsr 14111 | Rumani | Có | 1 | ISO885916 |
MULE_INTERNAL | Mã nội bộ Mule | Emacs đa ngôn ngữ | Có | 1-4 | |
SJIS | SHIFT JIS | Nhật Bản | Không | 1-2 | mskanji, ShiftJis, Win932, Windows932 |
Shift_Jis_2004 | 17621_17644 | Nhật Bản | không | 1-2 | |
SQL_ASCII | không xác định (xem văn bản) | Any | Có | 1 | |
UHC | Mã Hangul thống nhất | Hàn Quốc | Không | 1-2 | Win949, Windows949 |
UTF8 | Unicode, 8-bit | tất cả | Có | 1-4 | Unicode |
Win866 | Windows CP866 | Cyrillic | Có | 1 | Alt |
Win874 | Windows CP874 | 18518_18524 | Có | 1 | |
Win1250 | Windows CP1250 | Trung Âu | Có | 1 | |
Win1251 | Windows CP1251 | Cyrillic | Có | 1 | Win |
Win1252 | Windows CP1252 | Tây Âu | Có | 1 | |
Win1253 | Windows CP1253 | Hy Lạp | Có | 1 | |
Win1254 | Windows CP1254 | Thổ Nhĩ Kỳ | Có | 1 | |
Win1255 | Windows CP1255 | Hê -bơ -rơ | Có | 1 | |
Win1256 | Windows CP1256 | Ả Rập | Có | 1 | |
Win1257 | Windows CP1257 | Baltic | Có | 1 | |
Win1258 | Windows CP1258 | Việt Nam | Có | 1 | ABC, tcvn, TCVN5712, 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, Latin8vàLatin10.
TheSQL_ASCIICài đặt hành xử khác nhau đáng kể so với các cài đặt khác. Khi máy chủ Bộ ký tự làSQL_ASCII, Máy chủ diễn giải các giá trị byte 0-127 theo tiêu chuẩn ASCII, trong khi Giá trị byte 128-255 được lấy làm ký tự không được giải thích. KHÔNG 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 quá nhiều tuyên bố rằng một mã hóa cụ thể đang được sử dụng, như một tuyên bố Vô minh về mã hóa. Trong hầu hết các trường hợp, nếu bạn đang làm việc Với bất kỳ dữ liệu không ASCII nào, việc sử dụng không khôn ngoanSQL_ASCIICài đặt vìPostgreSQLsẽ không thể giúp bạn Chuyển đổi hoặc xác nhận các ký tự không phải ASCII.
initDBXác định ký tự mặc định Đặt (mã hóa) cho mộtPostgreSQLCụm. Ví dụ,
initDB -e euc_jp
Đặt ký tự mặc định được đặt thànhEUC_JP21494_21544---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 thích hợp để sử dụng dựa trên Locale mặc định.
Bạn có thể chỉ định mã hóa không mặc định tại Tạo cơ sở dữ liệu thời gian, với điều kiện là mã hóa tương thích với Locale:
22033_22122
Điều này sẽ tạo cơ sở dữ liệu có tênHàn Quốcsử 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:
22393_22509
22517_22570Template0Cơ sở dữ liệu. Khi sao chép bất kỳ cơ sở dữ liệu nào khác, Các cài đặt mã hóa và địa phương không thể được thay đổi từ các cài đặt Cơ sở dữ liệu nguồn, vì điều đó có thể dẫn đến dữ liệu bị hỏng. Vì Thêm thông tin xemPhần 21.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 The\ Llệnh.
$PSQL -LDanh sách cơ sở dữ liệu Tên | Chủ sở hữu | Mã hóa | Đối chiếu | Ctype | Truy cập các đặc quyền -----------+----------+-----------+-------------+--------------+----------------------------------------------------- clocaledb | Hlinnaka | SQL_ASCII | C | C | Tiếng Anhdb | Hlinnaka | UTF8 | en_gb.utf8 | en_gb.utf8 | Tiếng Nhật | Hlinnaka | UTF8 | ja_jp.utf8 | ja_jp.utf8 | Hàn Quốc | Hlinnaka | Euc_kr | ko_kr.euckr | ko_kr.euckr | Postgres | Hlinnaka | UTF8 | fi_fi.utf8 | fi_fi.utf8 | Template0 | Hlinnaka | UTF8 | fi_fi.utf8 | fi_fi.utf8 | = c/hlinnaka, hlinnaka = ctc/hlinnaka Template1 | Hlinnaka | UTF8 | fi_fi.utf8 | fi_fi.utf8 | = c/hlinnaka, hlinnaka = ctc/hlinnaka
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 được sử dụng. TRÊN các hệ thống cũ hơn, trách nhiệm của bạn là đả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. Một sai lầm trong Khu vực này có khả năng dẫn đến hành vi kỳ lạ của phụ thuộc vào địa phương các hoạt động như sắp xếp.
PostgreSQLsẽ cho phép Superusers để tạo cơ sở dữ liệu vớiSQL_ASCIImã hóa ngay cả khilc_ctypekhông phảiChoặcPOSIX. Như đã lưu ý ở trên,SQL_ASCIIkhô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 này của Cài đặt bị phản đối và một ngày nào đó có thể bị cấm hoàn toàn.
PostgreSQLHỗ trợ tự động Chuyển đổi bộ ký tự giữa máy chủ và máy khách cho một số Kết hợp bộ ký tự. Thông tin chuyển đổi được lưu trữ trong Thepg_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 22-2. Bạn có thể tạo chuyển đổi mới bằng lệnh SQLTạo chuyển đổi.
Bảng 22-2. Chuyể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ợ như một máy chủ mã hóa |
EUC_CN | EUC_CN, Mule_Internal, UTF8 |
EUC_JP | EUC_JP, Mule_Internal, SJIS, UTF8 |
EUC_JIS_2004 | EUC_JIS_2004, shift_jis_2004, UTF8 |
EUC_KR | EUC_KR, Mule_Internal, UTF8 |
EUC_TW | EUC_TW, Big5, MULE_INTERNAL, UTF8 |
GB18030 | Không được hỗ trợ làm máy chủ mã hóa |
GBK | Không được hỗ trợ như một máy chủ mã hóa |
ISO_8859_5 | ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, Win866, Win1251 |
ISO_8859_6 | ISO_8859_6, UTF8 |
ISO_8859_7 | ISO_8859_7, UTF8 |
ISO_8859_8 | ISO_8859_8, UTF8 |
Johab | Không được hỗ trợ làm máy chủ mã hóa |
KOI8R | KOI8R, ISO_8859_5, Mule_Internal, UTF8, Win866, Win1251 |
KOI8U | 28718_28725, UTF8 |
Latin1 | Latin1, MULE_INTERNAL, UTF8 |
Latin2 | Latin2, MULE_INTERNAL, UTF8, Win1250 |
Latin3 | Latin3, Mule_Internal, UTF8 |
Latin4 | Latin4, Mule_Internal, UTF8 |
Latin5 | Latin5, UTF8 |
Latin6 | Latin6, UTF8 |
Latin7 | Latin7, UTF8 |
Latin8 | 30047_30055, UTF8 |
Latin9 | Latin9, UTF8 |
Latin10 | Latin10, UTF8 |
MULE_INTERNAL | MULE_INTERNAL, Big5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8R, Latin1đếnLatin4, SJIS, Win866, Win1250, Win1251 |
SJIS | Không được hỗ trợ như một máy chủ mã hóa |
Shift_Jis_2004 | Không được hỗ trợ làm máy chủ mã hóa |
SQL_ASCII | Bất kỳ (không có sự chuyển đổi nào đã thực hiện) |
UHC | Không được hỗ trợ làm máy chủ mã hóa |
UTF8 | Tất cả được hỗ trợ mã hóa |
Win866 | Win866, ISO_8859_5, KOI8R, Mule_Internal, UTF8, Win1251 |
Win874 | Win874, UTF8 |
Win1250 | Win1250, Latin2, Mule_Internal, UTF8 |
Win1251 | Win1251, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, Win866 |
Win1252 | Win1252, UTF8 |
Win1253 | Win1253, UTF8 |
Win1254 | Win1254, UTF8 |
Win1255 | Win1255, UTF8 |
Win1256 | Win1256, UTF8 |
Win1257 | Win1257, UTF8 |
Win1258 | Win1258, UTF8 |
Để bật 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ác cách để thực hiện điều này:
Sử dụng\ mã hóaLệnh trongPSQL. \ mã hóaCho phép bạn thay đổi mã hóa máy khách trên ruồi. Ví dụ: để thay đổi mã hóa thànhSJIS, loại:
\ mã hóa SJIS
libpq(Phần 31.10) có chức năng kiểm soát mã hóa máy khách.
Sử dụngđặt client_encoding thành. Cài đặ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ênVì mục đích này:
Đặt tên 'giá trị';
Để 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ụngpgclientencoding34977_35009pgclientencoding35046_35262
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ỳ của các phương thức khác được đề cập ở trên.)
35649_35731EUC_JPĐối với máy chủ VàLatin1cho khách hàng và một số Các ký tự Nhật Bản được trả lại 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, Chuyể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_ASCIIkhông khôn ngoan trừ khi bạn là Làm việc với dữ liệu All-ASCII.
Đây là những nguồn tốt để bắt đầu tìm hiểu về các loại khác nhau Hệ thống mã hóa.
Chứa các giải thích chi tiết vềEUC_JP, 36688_36696, EUC_KR, EUC_TW.
Trang web của Hiệp hội Unicode.
UTF-8 (UCS/unicode 8 bit Định dạng chuyển đổi) được xác định ở đây.