Èeské tøídìní v PostgreSQL
1) je nutne mit PostgreSQL kompilovan s --enable-locale, v pripade
chuti pouzit unicode tak i --enable-multibyte (apod.)
(poznamka k 7.2: --enable-nls, --enable-multibyte --enable-locale
znamena podporu LS_MESSAGES (error hlasky v napr. cestine),
podpora unicode, podpora locales)
- vice viz ./configure --help
2) po nainstalovani je nutne udelat inicializaci adresare do ktereho
se ukladaji databaze:
Inicializaci je nutne provadet pod jinym nez root uzivatelem)
# su - postgres
PostgreSQL ignoruje u LC_COLLATE a LC_CTYPE nastaveni jine nez bylo
provedene pri inicializaci. Tedy pozdejsi zmena v nejakem starovacim
skriptu nema efekt! Duvodem je nutnost udrzet konzistentni indexy
apod.
$ export LANG='cs_CZ'
Vlastni inicializace:
$ initdb -D /adresar/nekde/
3) start PostgreSQL serveru
4) dalsi zakladni nastaveni
# su - postgres
$ createuser muj_admin
$ createdb nejaka_db
5) pouzivani:
- chcete-li pouzivat data v nejakem kodovani musite mit, DB
ktera to podporuje:
CREATE DATABASE neco WITH ENCODING = 'LATIN2'
Lze i pouzivat "obecne" kodovani napr. UNICODE, MULE_INTERNAL.
- server musi vedet jake kodovani pouziva klient, to lze provest
na strane klient napriklad pomoci "export PGCLIENTENCODING='LATIN2'",
nebo pomoci SQL prikazu SET CLIENT_ENCODING TO 'LATIN2';
Toto nastaveni je platne pro daneho klienta. K jedne DB (napr. v
UNICODE) muze pristupovat vice klientu s ruznym kodovanim.
- server je schopen prekodovavat za chodu, napr. z UNICODE do
LATIN2, WIN1250 apod.
- informaci o nastaveni kodovani zjistite pomoci:
SHOW SERVER_ENCODIND;
SHOW CLIENT_ENCODING;
Jednoduchy test:
* vytvorit soubor s obsahem:
SHOW CLIENT_ENCODING;
SHOW SERVER_ENCODING;
CREATE TABLE aaa (data varchar(16), dec varchar(3));
COPY aaa FROM stdin;
YYYY 87
áááá 225
AAAA 65
¾¾¾¾ 190
ÝÝÝÝ 221
aaaa 97
bbbb 98
tttt 116
¹¹¹¹ 185
ýýýý 253
\.
SELECT * FROM aaa ORDER BY data;
DROP TABLE aaa;
a pak ho nasmerovat na klient:
$ export PGCLIENTENCODING='LATIN2'
$ pgsql moje_latin2_db < soubor
vysledek:
NOTICE: Current client encoding is 'LATIN2'
SHOW VARIABLE
NOTICE: Current server encoding is 'LATIN2'
SHOW VARIABLE
CREATE
data | dec
------+-----
AAAA | 65
aaaa | 97
áááá | 225
bbbb | 98
¹¹¹¹ | 185
tttt | 116
YYYY | 87
ÝÝÝÝ | 221
ýýýý | 253
¾¾¾¾ | 190
(10 øádek)
DROP
Karel Zak
PS. uvedeny priklad je z PG 7.2.
Odkazy: