Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка сообщений. / 5 сообщений из 5, страница 1 из 1
23.01.2007, 13:14
    #34274969
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка сообщений.
В какой кодировка выводятся сообщения в PostgreSQL?

Установил я lc_messages в postgresql.cfg в ru_RU. LANG в системе (дело происходит под Linux) ru_RU.UTF-8

В какой кодировке сообщения пишутся в log?

В какой кодировке сообщения отдаются клиенту и как этим управлять?
...
Рейтинг: 0 / 0
23.01.2007, 13:20
    #34275014
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка сообщений.
Дополнения -
client_encoding UNICODE
server_encoding UTF8

В лог пишется в чем-то подозрительно напоминающем CP866.
...
Рейтинг: 0 / 0
23.01.2007, 14:25
    #34275340
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка сообщений.
Вот так выглядит фрагмент сценария работы с psql.

==
test72483_2=# show client_encoding;
client_encoding
-----------------
UTF8
(1 запись)

test72483_2=# show server_encoding;
server_encoding
-----------------
UTF8
(1 запись)

test72483_2=# select 1 from sfsdfsf;
ERROR: "sfsdfsf"
test72483_2=# show lc_messages;
lc_messages
-------------
ru_RU.utf8
(1 запись)

test72483_2=# select 1 from sdfsdfsdf-sdfsdfsdf;
ERROR: "-" у символа 24
СТРОКА 1: select 1 from sdfsdfsdf-sdfsdfsdf;
^
test72483_2=#
==

Дело происходило в консоли в UTF-8. Квадратиками получились напечатные
(т.е. не имеющие отображения в UTF-8, насколько я понимаю) символы.
Особенно меня радует то, что слова "у символа" отображаются
в правильной кодировке.
"запись" пишет сам psql, так что тут все понятно.


Удавалось ли добиться русских сообщений в UTF?

Буду признателен на участие в этой оживленной дискуссии
кого-нибудь, кроме меня самого.
...
Рейтинг: 0 / 0
23.01.2007, 14:40
    #34275408
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка сообщений.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
-bash- 3 . 00 $ psql base
Welcome to psql  8 . 2 . 1 , the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

base=> show client_encoding;
 client_encoding
-----------------
 UTF8
( 1  запись)

base=> show server_encoding;
 server_encoding
-----------------
 UTF8
( 1  запись)

base=> select  1  from sfsdfsf;
ERROR:  отношение "sfsdfsf" не существует
base=> select  1  from sdfsdfsdf-sdfsdfsdf;
ERROR:  ошибка синтаксиса в или рядом "-"
LINE  1 : select  1  from sdfsdfsdf-sdfsdfsdf;
                               ^
base=> show lc_messages;
 lc_messages
-------------
 ru_RU.UTF- 8 
( 1  запись)

base=> \q
-bash- 3 . 00 $ locale
LANG=ru_RU.UTF- 8 
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
-bash- 3 . 00 $ uname -a
Linux pg-server  2 . 6 . 12 - 1 .1381_FC3smp # 1  SMP Fri Oct  21   04 : 03 : 26  EDT  2005  i686 i686 i386 GNU/Linux
-bash- 3 . 00 $ rpm -q postgresql
postgresql- 8 . 2 . 1 -1PGDG
-bash- 3 . 00 $ rpm -q postgresql-server
postgresql-server- 8 . 2 . 1 -1PGDG
...
Рейтинг: 0 / 0
23.01.2007, 17:11
    #34276140
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка сообщений.
Исследования показали, что если делать initdb c --locale=ru_RU.utf8, то все нормально.
Если initdb запускался с --locale=ru_RU, то все плохо (даже если потом исправить в postgresql.conf
lc_messages c ru_RU на ru_RU.utf8).

Никаких других отличий в postgresql.conf нет, однако кластеры ведут себя по-разному.

Параметр --encoding на ситуацию не влияет.

Получается, что если encoding (а не только locale) сообщений существенен, то он д.б. задан при инициализации кластера, и никак иначе. Или не задан вовсе - тогда locale возьмут из окружения, а если LANG равен чему-нибудь типа ru_RU.UTF-8, то все будет работать по-русски без специальных усилий.

Буду рад, если кто-нибудь сможет подтвердить или опровергнуть мои изыскания.

Спасибо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка сообщений. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]