I have installed postgreSQL.
I use pgAdminIII as admin panel.
I am trying to watch tables content and see following:
How to avoid encoding problem?
Daniel Vérité
58.2k15 gold badges129 silver badges156 bronze badges
asked Oct 4, 2014 at 11:16
5
For a UTF8 database, pgAdmin should always display strings correctly. The most likely explanation is that the data itself is incorrect.
This generally happens when a client application sends data in a format which doesn’t match its client_encoding setting. If this is the case, setting client_encoding correctly would prevent this from happening (provided the client application’s code page is supported by Postgres). This wouldn’t fix the existing data, but it might be possible to repair it with the convert function.
answered Oct 4, 2014 at 12:39
Nick BarnesNick Barnes
19.9k3 gold badges51 silver badges63 bronze badges
5
1 Answer
Sorted by:
Reset to default
0
Before : C:\Program Files\PostgreSQL\12\share\locale
After : C:\Program Files\PostgreSQL\12\share\_locale
In my case, Change ‘locale’ directory name. It works well.
edited Feb 28 at 7:23
answered Feb 27 at 8:07
palbokpalbok
486 bronze badges
Add a comment
|
Your Answer
Reminder: Answers generated by Artificial Intelligence tools are not allowed on Stack Overflow. Learn more
Sign up or log in
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Name
Required, but never shown
By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Not the answer you’re looking for? Browse other questions tagged
- postgresql
- pgadmin
or ask your own question.
Not the answer you’re looking for? Browse other questions tagged
- postgresql
- pgadmin
or ask your own question.
Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана — студенческое сообщество
В статье пойдёт речь о том, как добиться корректного вывода кириллицы в «консоли» Windows (cmd.exe).
Содержание
- 1 Описание проблемы
- 2 Решение проблемы
- 2.1 Суть
- 2.2 Конкретные действия
- 2.2.1 Супер быстро и просто
- 2.2.2 Быстро и просто
- 2.2.3 Посложнее и подольше
Описание проблемы
В дистрибутив PostgreSQL, помимо всего прочего, для работы с СУБД входит:
- приложение с графическим интерфейсом
pgAdmin; - консольная утилита
psql.
При работе с psql в среде Windows пользователи всегда довольно часто сталкиваются с проблемой вывода кириллицы. Например, при отображении результатов запроса к таблице, в полях которых хранятся строковые данные на русском языке.
Ну и зачем тогда работать с psql, кому нужно долбить клавиатурой в консольке, когда можно всё сделать красиво и быстро в pgAdmin? Ну, не всегда pgAdmin доступен, особенно если речь идёт об удалённой машине. Кроме того, выполнение SQL-запросов в текстовом режиме консоли — это +10 к хакирству.
Решение проблемы
Версии ПО:
- MS Windows 7 SP1 x64;
- PostgreSQL 8.4.12 x32.
На сервере имеется БД, созданная в кодировке UTF8.
Суть
Суть проблемы в том, что cmd.exe работает (и так будет до скончания времён) в кодировке CP866, а сама Windows — в WIN1251, о чём psql предупреждает при начале работы:
WARNING: Console code page (866) differs from Windows code page (1251)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Значит, надо как-то добиться, чтобы кодировка была одна.
В разных источниках встречаются разные рецепты, включая правку реестра и подмену файлов в системных папках Windows. Ничего этого делать не нужно, достаточно всего трёх шагов:
- сменить шрифт у
cmd.exe; - сменить текущую кодовую страницу
cmd.exe; - сменить кодировку на стороне клиента в
psql.
Конкретные действия
Супер быстро и просто
Запускаете cmd.exe, оттуда psql:
psql -d ВАШАБАЗА -U ВАШЛОГИН
Далее:
psql ! chcp 1251
Быстро и просто
Запускаете cmd.exe, оттуда psql:
psql -d ВАШАБАЗА -U ВАШЛОГИН
Вводите пароль (если установлен) и выполняете команду:
set client_encoding='WIN866';
И всё. Теперь результаты запроса, содержащие кириллицу, будут отображаться нормально. Но есть небольшой косяк:
Потому предлагаем ещё способ, который этого недостатка лишён.
Посложнее и подольше
Запустить cmd.exe, нажать мышью в правом левом верхнем углу окна, там Свойства — Шрифт — выбрать Lucida Console. Нажать ОК.
Выполнить команду:
chcp 1251
В ответ выведет:
Текущая кодовая страница: 1251
Запустить psql;
psql -d ВАШАБАЗА -U ВАШЛОГИН
Кстати, обратите внимание — теперь предупреждения о несовпадении кодировок нет.
Выполнить:
set client_encoding='win1251';
Он выведет:
SET
Всё, теперь кириллица будет нормально отображаться.
Проверяем:
|
12 / 11 / 5 Регистрация: 21.08.2012 Сообщений: 226 |
|
|
1 |
|
|
03.03.2022, 13:21. Показов 2755. Ответов 2
Доброго времени суток. При восстановлении базы данных из дампа в сообщениях лога нарушается кодировка — часть текста выводится знаком вопроса. Если база успешно восстанавливается, то это не страшно. Но вот восстановление базы postgres_air завершается с ошибкой, а какая ошибка — понять невозможно. Основной вопрос — как настроить PgAdmin так, чтобы текст в логах стал читаемым. Версия PgAdmin: 6.4 P.S. Если кому интересно: Добавлено через 2 часа 52 минуты Кликните здесь для просмотра всего текста
PID Пользователь Приложение Клиент Серверный процесс запущен Состояние Wait event Блокирующие PID C:Program FilesPostgreSQL14binpg_restore.exe —host «localhost» —port «5432» —username «postgres» —no-password —dbname «postgres_air» —section=pre-data —section=data —section=post-data —clean —verbose «D:\Books\Database\Другие СУБД\PostgreSQL\Домбровская. Оптимизация запросов PostgreSQL\postgres_air.backup» . . . pg_restore: ???????? FK CONSTRAINT «postgres_air.boarding_pass passenger_id_fk» 0 |
|
1213 / 938 / 373 Регистрация: 02.09.2012 Сообщений: 2,859 |
|
|
04.03.2022, 00:32 |
2 |
|
попробуйье туже самую команду из консоли windows, поигравшись с кодировками перед запуском pg_restore 1 |
|
12 / 11 / 5 Регистрация: 21.08.2012 Сообщений: 226 |
|
|
04.03.2022, 08:30 [ТС] |
3 |
|
grgdvo Последовал Вашему совету и запустил из командной строки FARа. Все сообщения отобразились корректно. Мало того, похоже база полностью загрузилась. Строк с числом 66 в конце вообще не вывело. И без всяких игр с кодировками. Проблема с кодировкой в PgAdmin не решена, но обходной путь найден. 0 |
I have installed postgreSQL.
I use pgAdminIII as admin panel.
I am trying to watch tables content and see following:
How to avoid encoding problem?
Daniel Vérité
57.4k15 gold badges127 silver badges152 bronze badges
asked Oct 4, 2014 at 11:16
5
For a UTF8 database, pgAdmin should always display strings correctly. The most likely explanation is that the data itself is incorrect.
This generally happens when a client application sends data in a format which doesn’t match its client_encoding setting. If this is the case, setting client_encoding correctly would prevent this from happening (provided the client application’s code page is supported by Postgres). This wouldn’t fix the existing data, but it might be possible to repair it with the convert function.
answered Oct 4, 2014 at 12:39
Nick BarnesNick Barnes
19.4k3 gold badges51 silver badges63 bronze badges
5
В логах периодически появляются сообщения в кракозябре. Не всегда. Обычно сообщения на русском отображаются нормально. Такая же проблема с кодировкой в pgAdmin, например, при попытке выполнить запрос с ошибкой в синтаксисе.
При установке и клиент и сервер выставлялся с кодировкой Win1251
Вот кусок лога:
2009-03-29 19:34:03 ALMT LOG: система была отключена: 2009-03-29 19:31:54 ALMT
2009-03-29 19:34:03 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:03 ALMT FATAL: система баз данных стартует
2009-03-29 19:34:03 ALMT LOG: database system is ready to accept connections
2009-03-29 19:34:03 ALMT LOG: autovacuum launcher started
2009-03-29 19:34:04 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:53 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:54 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:34:54 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:54 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:34:58 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:35:29 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:35:30 ALMT NOTICE: нет транзакции в процессе выполнения
Вот. А последняя ошибка очень интересует.
Что тут можно предпринять?
Спасибо.
ОС: XP Pro. Postgres версии 8.3.
I have a PostgreSQL on Windows 7 machine. And here my data base script:
CREATE DATABASE usersdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'Russian_Russia.1251'
LC_CTYPE = 'Russian_Russia.1251'
CONNECTION LIMIT = -1;
My problem in that i see unreadable error in Jetty/Tomcat:
Caused by: org.postgresql.util.PSQLException: ?????: ???????????? "test_user" ?? ?????? ???????? ??????????? (?? ??????)
I try create new db in pgAdmin but there are only LC_COLLATE = ‘Russian_Russia.1251’ and LC_CTYPE = ‘Russian_Russia.1251’ i can chose.
How can i solve this problem?
asked Aug 28, 2013 at 8:02
Kliver MaxKliver Max
5,06622 gold badges95 silver badges148 bronze badges
1
The first place to look, of course, are in the PostgreSQL logs. Those may be better handled than your Jetty/Tomcat instance.
The second question is what client encoding is set. You may want to (via jdbc):
show client_encoding;
Finally lc_messages may need to be adjusted.
answered Nov 12, 2013 at 1:57
Chris TraversChris Travers
25.2k6 gold badges63 silver badges181 bronze badges
В логах периодически появляются сообщения в кракозябре. Не всегда. Обычно сообщения на русском отображаются нормально. Такая же проблема с кодировкой в pgAdmin, например, при попытке выполнить запрос с ошибкой в синтаксисе.
При установке и клиент и сервер выставлялся с кодировкой Win1251
Вот кусок лога:
2009-03-29 19:34:03 ALMT LOG: система была отключена: 2009-03-29 19:31:54 ALMT
2009-03-29 19:34:03 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:03 ALMT FATAL: система баз данных стартует
2009-03-29 19:34:03 ALMT LOG: database system is ready to accept connections
2009-03-29 19:34:03 ALMT LOG: autovacuum launcher started
2009-03-29 19:34:04 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:53 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:54 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:34:54 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:54 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:34:58 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:35:29 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:35:30 ALMT NOTICE: нет транзакции в процессе выполнения
Вот. А последняя ошибка очень интересует.
Что тут можно предпринять?
Спасибо.
ОС: XP Pro. Postgres версии 8.3.
MurCode
- Форумы
- Поиск
- О проекте
SeniorAndre
Дата: 04.05.2009 09:59:37
Господа, если кто силён в английском, опишите ошибку плиз на pgadmin-support@postgresql.org, а то у меня плохо получится…
В конcоле «Cостояниt сервера», которая есть в pgAdmin 1.10 отображается лог файл, он и в 1.8 был, но теперь внём кирилица оказалась ломаная. В 1.10 сделано очень удобно, строки из лог файла можно теперь копировать в буфер обмена (сделали кнопку), так вот теперь другая незадача (кирилица ломанная).
Вот текст из консоли
:44 MSD LOG: 00000: duration 781.000 ms statement: SELECT tt.SmiShortName AS РЎРњР, CAST(COUNT(tt.ClientID) AS INTEGER) AS Количество_фирм_РІ_номере FROM (SELECT DISTINCT SmiShortName, ClientID FROM Analitic a WHERE a.SmiId='APPS000011' and a.NomerSmi>=766 and a.NomerSmi<=771 and (a.SumWithNDS>0 or a.SumWithNDS+0>0) ) as tt GROUP BY tt.SmiShortName ORDER BY tt.SmiShortName
А вот текст из Лог файла.
05-04 09:33:44 MSD LOG: 00000: duration: 2781.000 ms statement: SELECT tt.SmiShortName AS СМИ, CAST(COUNT(tt.ClientID) AS INTEGER) AS Количество_фирм_в_номере FROM (SELECT DISTINCT SmiShortName, ClientID FROM Analitic a WHERE a.SmiId='APPS000011' and a.NomerSmi>=766 and a.NomerSmi<=771 and (a.SumWithNDS>0 or a.SumWithNDS+0>0) ) as tt GROUP BY tt.SmiShortName ORDER BY tt.SmiShortName
Версия postger 8.3.7, Win2K
pgAdmin 1.10b2, Win2K
База объявлена вот так, кодировка WIN1251
CREATE DATABASE "IS2004" WITH OWNER = postgres ENCODING = 'WIN1251' CONNECTION LIMIT = -1; ALTER DATABASE "IS2004" SET search_path=ctu_work, pg_catalog, public, ctu_archiv;
vzdor
Дата: 05.05.2009 02:15:44
SeniorAndre
Дата: 05.05.2009 08:28:25
для 1.8.4 show client_encoding => UNICODE
для 1.10b2 show client_encoding => UNICODE
vzdor
Дата: 05.05.2009 09:42:32
set client_encoding='win';
vzdor
Дата: 05.05.2009 10:38:35
сначала написал, потом начал проверять 
запускаю ошибку в разных кодировках клиента и сервера (что указываю в тексте ошибки)
в кодировке просмотра utf-8 лог выглядит так:
2009-05-05 17:23:33 VLAST STATEMENT: select ‘s-utf8 cl-utf8 вдаплдво ваэ’xd d
2009-05-05 17:24:42 VLAST STATEMENT: select ‘s-utf8 cl-win вдаплдво ваэ’xd d
2009-05-05 17:25:33 VLAST STATEMENT: select ‘s-WIN1251 cl-win вдаплдво ваэ’xd d
2009-05-05 17:26:06 VLAST STATEMENT: select ‘s-WIN1251 cl-utf8 㥠𐬤㬠㡽’xd d
в кодировке win1251 так:
2009-05-05 17:23:33 VLAST STATEMENT: select ‘s-utf8 cl-utf8 вдаплдво ваэ’xd d
2009-05-05 17:24:42 VLAST STATEMENT: select ‘s-utf8 cl-win вдаплдво ваэ’xd d
2009-05-05 17:25:33 VLAST STATEMENT: select ‘s-WIN1251 cl-win вдаплдво ваэ’xd d
2009-05-05 17:26:06 VLAST STATEMENT: select ‘s-WIN1251 cl-utf8 вдаплдво ваэ’xd d
SeniorAndre
Дата: 05.05.2009 16:06:50
Только не понтно как это можно использовать в pgAdmin на Win, т.к. настройки нет в QueryTools своя сессия и она ни как не влияет на client_encoding другого коннекта и тем более на отображение лога.
vzdor
Дата: 06.05.2009 02:16:19
| SeniorAndre |
| Только не понтно как это можно использовать в pgAdmin на Win, т.к. настройки нет в QueryTools своя сессия и она ни как не влияет на client_encoding другого коннекта и тем более на отображение лога. |
Лог пишется в кодировке клиента и/или базы, а открывается для просмотра в кодировке юникод, поэтому не все читается. Вы в курсе, в какой кодировке открывал файлы pgAdmin 1.10?
Предлагаю вам проделать такой же эксперимент, как сделал я — это занимает минут 10
SeniorAndre
Дата: 06.05.2009 08:23:51
К сожалению я не властен над тем в какой кодировке открывает файлы pgAdmin и в какой копирует в буфер обмена. И ваш эксперемент поставленный в окне Query будет работать, но что дальше делать с этим?
SeniorAndre
Дата: 08.05.2009 09:45:42
pgAdmin 1.10.0 beta3 — таже фигня, кирилица в отображении лога ломаная. :((
Ёш
Дата: 10.05.2009 02:04:14







ostgres_air 127.0.0.1 2022-03-02 15:47:05 +04 active