Rozdział 3

Lokalizacja

3.1  Kodowanie znaków

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:

Kodowanie Opis
SQL_ASCII ASCII
UNICODE Unicode (UTF-8)
LATIN1 ISO 8859-1 ECMA-94 Latin Alphabet No.1
LATIN2 ISO 8859-2 ECMA-94 Latin Alphabet No.2
WIN Windows CP1251
ALT Windows CP866

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)

3.1.1  Automatyczne przekodowania między serwerem a klientem

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

Kodowanie na serwerze Dostępne kodowania dla klienta
SQL_ASCII SQL_ASCII, UNICODE
LATIN1 LATIN1, UNICODE
LATIN2 LATIN2, WIN1250, UNICODE
UNICODE LATIN1, LATIN2, WIN, ALT, WIN1250, UNICODE
WIN WIN, ALT, UNICODE
ALT WIN, ALT, UNICODE

Wyboru przekodowania można dokonać kilkoma sposobami.