| PostgreSQL Reference Manual - Volume 3 - Server Administration Guide by The PostgreSQL Global Development Group Paperback (6"x9"), 204 pages ISBN 0954612043 RRP £13.95 ($24.95) Sales of this book support the PostgreSQL project! Get a printed copy>>> |
8.2.3 Automatic Character Set Conversion Between Server and Client
PostgreSQL supports automatic
character set conversion between server and client for certain
character set combinations. The conversion information is stored in the
pg_conversion system catalog. PostgreSQL
comes with some predefined conversions, as shown in Table 8-2. You can create a new
conversion using the SQL command CREATE CONVERSION.
| Server Character Set | Available Client Character Sets
|
BIG5 | not supported as a server encoding
|
EUC_CN | EUC_CN,
MULE_INTERNAL,
UTF8
|
EUC_JP | EUC_JP,
MULE_INTERNAL,
SJIS,
UTF8
|
EUC_KR | EUC_KR,
MULE_INTERNAL,
UTF8
|
EUC_TW | EUC_TW,
BIG5,
MULE_INTERNAL,
UTF8
|
GB18030 | not supported as a server encoding
|
GBK | not supported as a server encoding
|
ISO_8859_5 | ISO_8859_5,
KOI8,
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 | JOHAB,
UTF8
|
KOI8 | KOI8,
ISO_8859_5,
MULE_INTERNAL,
UTF8,
WIN866,
WIN1251
|
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 | LATIN8,
UTF8
|
LATIN9 | LATIN9,
UTF8
|
LATIN10 | LATIN10,
UTF8
|
MULE_INTERNAL | MULE_INTERNAL,
BIG5,
EUC_CN,
EUC_JP,
EUC_KR,
EUC_TW,
ISO_8859_5,
KOI8,
LATIN1 to LATIN4,
SJIS,
WIN866,
WIN1250,
WIN1251
|
SJIS | not supported as a server encoding
|
SQL_ASCII | any (no conversion will be performed)
|
UHC | not supported as a server encoding
|
UTF8 | all supported encodings
|
WIN866 | WIN866,
ISO_8859_5,
KOI8,
MULE_INTERNAL,
UTF8,
WIN1251
|
WIN874 | WIN874,
UTF8
|
WIN1250 | WIN1250,
LATIN2,
MULE_INTERNAL,
UTF8
|
WIN1251 | WIN1251,
ISO_8859_5,
KOI8,
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
|
To enable automatic character set conversion, you have to tell PostgreSQL the character set (encoding) you would like to use in the client. There are several ways to accomplish this:
-
Using the
\encodingcommand in psql.\encodingallows you to change client encoding on the fly. For example, to change the encoding toSJIS, type:\encoding SJIS
-
Using libpq functions.
\encodingactually callsPQsetClientEncoding()for its purpose.int PQsetClientEncoding(PGconn *conn, const char *encoding);
where conn is a connection to the server, and encoding is the encoding you want to use. If the function successfully sets the encoding, it returns 0, otherwise -1. The current encoding for this connection can be determined by using:int PQclientEncoding(const PGconn *conn);
Note that it returns the encoding ID, not a symbolic string such asEUC_JP. To convert an encoding ID to an encoding name, you can use:char *pg_encoding_to_char(int encoding_id);
-
Using
SET client_encoding TO. Setting the client encoding can be done with this SQL command:SET CLIENT_ENCODING TO 'value';
Also you can use the standard SQL syntaxSET NAMESfor this purpose:SET NAMES 'value';
To query the current client encoding:SHOW client_encoding;
To return to the default encoding:RESET client_encoding;
-
Using
PGCLIENTENCODING. If the environment variablePGCLIENTENCODINGis defined in the client's environment, that client encoding is automatically selected when a connection to the server is made. (This can subsequently be overridden using any of the other methods mentioned above.) -
Using the configuration variable
client_encoding. If theclient_encodingvariable is set, that client encoding is automatically selected when a connection to the server is made. (This can subsequently be overridden using any of the other methods mentioned above.)
If the conversion of a particular character is not possible--suppose you chose EUC_JP for the
server and LATIN1 for the client, then some
Japanese characters do not have a representation in
LATIN1---then an error is reported.
If the client character set is defined as SQL_ASCII,
encoding conversion is disabled, regardless of the server's character
set. Just as for the server, use of SQL_ASCII is unwise
unless you are working with all-ASCII data.
| ISBN 0954612043 | PostgreSQL Reference Manual - Volume 3 - Server Administration Guide | See the print edition |