powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка русских букв.
25 сообщений из 44, страница 1 из 2
Кодировка русских букв.
    #38238778
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Сразу оговорюсь с PostgreSQL сталкиваюсь впервые и как всегда встает проблема с кодировками.

Есть сторонняя база в PostgreSQL 8.1. В базу пишутся данные из приложения.
Нам дали удаленный доступ к этой БД. При открытии таблиц из pgAdmin, слова на русском отображаются криво, смотри картинку:
Декодер Лебедева показал, что это "Холодная вода" CP1252 → CP1251
Знаю, что база на win машине. Приложение которое пишет данные в базу разрабатывалось в Германии. Кодировка базы UTF8.

Как я на своем компьютере смогу посмотреть русские буквы из pgAdmin ?
Если нужны еще какие-то данные по серверу/клиенту готов предоставить.
-----------
Андрей.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38239334
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38239416
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy,

Прочел, спасибо.
Но не знаю чем от туда я могу помочь себе.
Если речь идет о
SET CLIENT_ENCODING TO ...
То я уже перепробовал много вариантов и ничего не получается.
Я уже давно ненавижу все это многообразие кодировок, но каждый раз приходится искать решение.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38239774
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю у вас Виндовс?
Запускаете cmd
psql ...
>set client_encoding='866'
>select * from ...

или попробуйте сменить кодовую страницу в консоли
cmd
далее пробуйте
chcp 1252 (или 1251 и т д)
psql ...
> select * from ...
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38240114
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy,

В командной строке помогло перед запуском psql выполнить chcp 1251.
После этого select выводит корректно русские буквы.
Вопрос: а как добиться такого результата при работе с pgAdmin и через ODBC драйвер?
Буду признателен любым подсказкам.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38240615
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38240960
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy,

Что-то ничего пока не выходит.
Я могу произвести манипуляции только на клиентской машине. Трогать сервер и базу никак нельзя.
Для начала хочу настроить pgAdmin, чтобы в нем корректно отображались данные.
Почитав форумы заметил что у людей в основной массе проблем с pgAdmin не было, но были проблемы с консолью. В моем случае практически наоборот. Как быть?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241149
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belkin,

Смотрите pgadmin всегда без вариантов использует UTF8 кодировку (кроме редкого случая SQL-ASCII базы):
http://www.postgresql.org/message-id/CA+OCxozjhM5wAj84vjRNWX5TLEYEMYeh37U=ibJt22m5nqtJmA@mail.gmail.com]http://www.postgresql.org/message-id/CA+OCxozjhM5wAj84vjRNWX5TLEYEMYeh37U=ibJt22m5nqtJmA@mail.gmail.com

я почему то думаю что у вас скорее проблема выбора шрифта правильного в PgAdmin который бы корректно бы показывал UTF8 русские буквы. Вы из под какой OS запускаете pgadmin и стоит ли там поддержка русского языка?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241174
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Все делается из под Windows. Русский установлен.
Машина с базой тоже виндовая, там установлен русский язык и немецкий, возможно английский.
Когда я был на месте, то успел заметить что там тоже в pgAdmin русские буквы некорректно отображаются (на 100% не уверен), но в приложении все красиво. Там с базой никто не работает кроме как через приложение.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241183
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belkin,

по мне так проще пальцем указать.
Сам долго понимал, что там да как с кодировками, когда пришло просветление, то стало удобно пользоваться :)
Для пгАдмин надо делать set client_encoding='1251', после коннекта и до sql запроса, это если sql запросом из него смотреть.
Еще есть SQL Manager Lite for PostgreSQL он умеет кодировку выставлять сам при коннекте к базе. Там настройки есть при создании коннекта к БД.

Если хотите использовать ODBC, который psqlodbc, то там не так все просто, там есть ситуация, когда внутри драйвера постоянно передергивается set client_encoding , но он, кстати, передергивается в 1251 :)

ЗЫЖ мне тут, кстати, совет давали хороший. Использовать в БД utf-8. Это реально помогает захватить мир, но это не ваш случай наверно :)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241220
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixantia,

Вы наверное имели ввиду win1251, а не просто 1251.
Это то что я сделал самым первым делом.

после установки клиента в win1251 и запуске select, появляется следующая ошибка:
Код: sql
1.
ERROR:  character 0xc3a2 of encoding "UTF8" has no equivalent in "WIN1251"



Вот что установлено на сервере в posgresql.conf
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
client_encoding = 'LATIN1'		# actually, defaults to database
					# encoding

# These settings are initialized by initdb -- they might be changed
lc_messages = 'German_Germany'			# locale for system error message 
					# strings
lc_monetary = 'German_Germany'			# locale for monetary formatting
lc_numeric = 'German_Germany'			# locale for number formatting
lc_time = 'German_Germany'				# locale for time formatting


Может это как-то поможет.
Я уже замучался с этим отображением... :(
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241465
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belkin,

Чтото мне кажется, что автоматом не сможете вы с такой базы видеть русские символы

http://www.postgresql.org/docs/9.2/static/multibyte.html#AEN33095

для LATIN1 нет автоматической перекодировки в WIN1251

База ваша наверно тоже создана в LATIN1 ?

Я все извращения с кодировками делал в Russian локализации (win1251 <-> win866)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241615
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixantia,

В консоли это как-то получается:
В командной строке помогло перед запуском psql выполнить chcp 1251.
После этого select выводит корректно русские буквы.
Да и программа как-то пишет/читает эти данные.
Кодировка базы UTF8.

Вот такая непонятка.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241818
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belkin,

Вы смотрите таблицу через редактор sql
или через меню просмотр данных?

Если через sql редактор, то перед select надо написать
set client_encoding='WIN1251';
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241838
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixantia,

Я смотрел и так и так.
В редакторе sql я вставлял set client_encoding='WIN1251'; и тогда возникает ошибка:

ERROR: character 0xc3a2 of encoding "UTF8" has no equivalent in "WIN1251"

В общем, какой-то замкнутый круг.
Но, так хочется и нужно его разорвать..!
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242120
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробуйте другие кодировки в set client_encoding
типа win866 win1252
я в них не очень разбираюсь :)
в своем проекте я только 866 и 1251 использовал, все туда сюда конвертилось.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242134
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте запустить pgAdmin через батник

set CLIENTENCODING='LATIN1' (или 1252)
pgadmin.exe

Мне кажется, в БД данные лежат в 1251, т е они передаются и записываются без конвертации из 1251
Когда вы в сессии устанавливаете set client_encoding to '...' данные конвертятся из 1251
(сервер считает, что они в LATIN1) в 1251 через таблицу LATIN1->1251
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242139
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т е когда вы сделали chcp1251 в консоли, вы сменили просто кодовую таблицу для отображения данных,
а об этом psql не догадывается, он что получил, то и отобразил - без конвертации
а т к он получил в 1251 - он просто вывел то, что получил на консоль
(конвертировать через set client_encoding его не просили)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242449
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если pgAdmin использует UTF-8, он скорее всего будет делать конвертацию
из той кодировки(у вас однобайтовая) в UTF-8. Но т к у вас будет latin1(чтобы не конвертировалось
сервер БД-> клиент), а фактически 1251, помеченные как latin 1
будет конвертация 1251 на таблице latin1->UTF-8, т е каша
Используйте psql или настройте сервер правильно(пересоздав БД и перегрузив данные)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38243764
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landyЕсли pgAdmin использует UTF-8, он скорее всего будет делать конвертацию
из той кодировки(у вас однобайтовая) в UTF-8. Но т к у вас будет latin1(чтобы не конвертировалось
сервер БД-> клиент), а фактически 1251, помеченные как latin 1
будет конвертация 1251 на таблице latin1->UTF-8, т е каша
Используйте psql или настройте сервер правильно(пересоздав БД и перегрузив данные)

Вот вы "накрутили" про кодировки... я толком и не понял.
Я уже склоняюсь к тому, что придется использовать psql.
Так как моя задача сводится к тому, что нужно забрать с того сервера часть данных и залить в SQL Server. То хочу попробовать еще через copy и промежуточный сервер PostreSQL.
Пока жду доступ к папке на сервере из которой буду забирать файлы после copy. Надеюсь там проблем с кодировкой не возникнет.
А так хотелось сделать все по простому через ODBC драйвер.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38243868
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelkinlandyЕсли pgAdmin использует UTF-8, он скорее всего будет делать конвертацию
из той кодировки(у вас однобайтовая) в UTF-8. Но т к у вас будет latin1(чтобы не конвертировалось
сервер БД-> клиент), а фактически 1251, помеченные как latin 1
будет конвертация 1251 на таблице latin1->UTF-8, т е каша
Используйте psql или настройте сервер правильно(пересоздав БД и перегрузив данные)

Вот вы "накрутили" про кодировки... я толком и не понял.
Я уже склоняюсь к тому, что придется использовать psql.
Так как моя задача сводится к тому, что нужно забрать с того сервера часть данных и залить в SQL Server. То хочу попробовать еще через copy и промежуточный сервер PostreSQL.
Пока жду доступ к папке на сервере из которой буду забирать файлы после copy. Надеюсь там проблем с кодировкой не возникнет.
А так хотелось сделать все по простому через ODBC драйвер.

чтобы работать через ODBC база на той стороне должна быть в 1251 а не в latin1 с данными в 1251.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38256795
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось сделать только через промежуточную базу.
1. Сделал COPY TO на базе с "кракозябрами"
2. Скопировал/переместил файл к себе (можно исключить шаг)
3. Залил в свою базу PostgreSQL через COPY FROM предварительно установив set client_encoding to 'win1251';
4. Через ODBC и link server в SQL Server залил данные.

Всем кто пытался помочь - ОГРОМНОЕ спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Кодировка русских букв.
    #39268163
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!
Тематика этого поста схожа с моей проблемой, поэтому решил не плодить новых тем.
Помогите вот с такой непоняткой:
Есть виндовый сервер, там Postgresql 9.5.3, сидит БД (кодировка = utf-8, сопоставление = Russian_Russia.1251). Эту БД я бэкапю с помощью pg_dump в файл *.sql.
Затем беру другой сервер с аналогичными параметрами, где заранее создаю БД с таким же названием, как и та, которую я забэкапил, этой базе я задал такие же кодировку и наименование.
Открываю cmd и пишу:
C:\Users\администратор>"c:\Program Files\PostgreSQL\9.5\bin\psql.exe" -U postgres -d <mydatabasename> -f E:\mydatabasename_dump.sql
Запускаю, ввожу пароль для postgres, начинается восстановление...все вроде бы хорошо, но тут хлоп - какая-то ошибка проскакивает (остановку на ошибке я не делаю, так как дело-то в основном все-равно для тестов, не страшно). Но вот ошибка эта выводится в кракозябрах:
psql:E:/mydatabasename_dump.sql:70: Р?РЁР?Р'Р?Р?: С"С?Р?РєС┼РёС? "writenavdatafromtable" С? Р°С?Р?С?Р?РчР?С'Р°Р?Рё С'акиС: С'РёРїР?Р? С?Р¶Рч С?С?С%РчС?С'Р?С?РчС'
Т.е. мне не страшно, что сами ошибки выпадают. Это в принципе ожидалось. Мне бы их как-то прочитать.
Что я уже только не пробовал.
и chcp с 866 на 1251 менял, и --set client_encoding='WIN1251' делал, и даже 'WIN866' пробовал (советовали тут в одном гайде). Все-равно кракозябры. Как быть?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39268657
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kerno,

1. Открой cmd.exe
2. Установи шрифт Lucida Console
3. Установи переменную: SET LANGUAGE=ru
4. Выполни команду: psql --help
Что выводится?

Но я бы предложил читать сообщения об ошибках на английском.
Для этого можно после запуска cmd.exe выставить переменную:
SET LANGUAGE=en

А для того чтобы данные правильно выгружались/загружались, важно использовать одну и туже кодировку для pg_dump при выгрузке и psql/pg_restore при загрузке.

Поскольку БД в UTF8, имеет смысл перед запуском pg_dump выставить:
SET PGCLIENTENCODING=UTF8

А в самой команде использовать опцию encoding:
pg_dump --encoding=UTF8
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39268662
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл
Павел Лузанов1. Открой cmd.exe
1.1. Выполни: chcp 1251
2. Установи шрифт Lucida Console
3. Установи переменную: SET LANGUAGE=ru
4. Выполни команду: psql --help
Что выводится?
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка русских букв.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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