Domyślny system kodowania znaków wybiera się inicjalizując PostgreSQL poleceniem initdb, na przykład:
$ initdb -E LATIN2
ustawia domyśłny system kodowania na LATIN2.
Zamiast opcji -E można użyć --encoding
.
Domyślnym systemem kodowania jest SQL_ASCII
.
System kodowania można zmienić podczas tworzenia bazy danych skryptem createdb (na przykład
$ createdb -E UNICODE mrbd
utworzy bazę danych mrbd z systemem kodowania UNICODE) lub poleceniem SQL CREATE DATABASE
CREATE DATABASE mrbd WITH ENCODING = 'UNICODE';
dzięki czemu w jednej instalacji można mieć bazy danych o różnych systemach kodowania znaków.
Poniższa tabela pokazuje najpopularniejsze systemy kodowania:
|
System kodowania dla bazy danych jest zapisany w kolumnie encoding
systemowego katalogu pg_database
. Najłatwiej obejrzeć go
używając opcji -l lub polecenia \l
programu psql.
$ psql -l List of databases Database | Owner | Encoding ---------------+----------+--------------- 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_internal | t-ishii | MULE_INTERNAL regression | t-ishii | SQL_ASCII template1 | t-ishii | EUC_JP test | t-ishii | EUC_JP mrbd | postgres | UNICODE (9 rows)
PostgreSQL umożliwia dokonanie przez serwer automatycznej konwersji
sposobu kodowania przy przesyłaniu danych do klienta.
Informacja o możliwych przekodowaniach znajduje się w systemowym
katalogu pg_conversion
. Nowe przekodowania można definiować
używając polecenia SQL CREATE CONVERSION. Najczęściej
używane predefiniowane przekodowania podaje tablica poniżej
|
Wyboru przekodowania można dokonać kilkoma sposobami.
Używając polecenia \encoding
w programie psql,
na przykład aby zmienić kodowanie na UNICODE piszemy
\encodingUNICODE
Używając w SQL polecenia
SET CLIENT_ENCODING TO 'kodowanie';
PostgreSQL akceptuje też składnię SQL92:
SET NAMES 'kodowanie';
Bieżące kodowanie można poznać pisząc
SHOW CLIENT_ENCODING;
zaś powrót do domyślnego kodowania wykonuje się poleceniem
RESET CLIENT_ENCODING;
Programowo używając funkcji z biblioteki libpq. Do zmiany kodowania po stronie klienta służy funkcja
int PQsetClientEncoding(PGconn *połączenie, const char *kodowanie)
Zwraca ona 0 jeśłi wszystko się udało, w przeciwnym razie -1. Bieżący sposób kodowania można zobaczyć funkcją
int PQclientEncoding(const PGconn *połączenie)
która zwraca ID bieżącego kodowania. Do zamiany ID na napis służy funkcja
char *pg_encoding_to_char(int id_kodowania)
Używając zmiennej środowiska PGCLIENTENCODING. Jeśli jest ona zdefiniowana, to jej wartość automatycznie wybiera podczas łączenia z serwerem sposób kodowania po stronie klienta.
Używając zmiennej client_encoding
z pliku postgresql.conf.
Jej wartość także wyznacza początkowy sposób kodowania po stronie klienta.