powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с UTF-8 и WIN1251
6 сообщений из 6, страница 1 из 1
Проблемы с UTF-8 и WIN1251
    #35706158
GRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новичек в PostgreSQL...
Вот такая проблема: создал базу с кодировкой win1251 на WinXP. Локаль кластера соответсвтенно тоже ru_ru.1251. Развернул web-приложение на Ruby, которое работает через Ruby on Rails. Поработал в нем недельку, заполнил определенное количество форм(читай таблиц) на русском. При этом кодировка в браузере стояла UTF-8, ибо только так нормально работала русификация ПО.
Теперь при попытке select в PGAdmin III по таблицам (например по "Users") русские буквы отображаются некорректно. Если выполнить в окне запроса set client_encoding=win1251, то select возвращает данные нормально.
Теперь мне нужно перенести дамп на другую машину. Делаю выгрузку в текстовый файл с sql:
Код: plaintext
1.
pg_dump.exe -h localhost -p  5432  -U postgres -F p -D -v 
-f "D:\PostgresDump\test_users2.backup" -t "\"public\".\"users\"" dbname_tst_2
В результате в файле русский текст читается только при просмотре в виде UTF-8. И залить его поэтому не получается. При попытке залить дампы других форматов возникают ошибки
Код: plaintext
1.
2.
3.
4.
5.
ERROR:  character 0x98 of encoding "WIN1251" has no equivalent in "UTF8"

********** Ошибка **********

ERROR: character 0x98 of encoding "WIN1251" has no equivalent in "UTF8"
SQL state: 22P05

Версия PostgreSQL 8.3
...
Рейтинг: 0 / 0
Проблемы с UTF-8 и WIN1251
    #35706193
GRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавить ключ -E win1251 к дампу не помогает.
...
Рейтинг: 0 / 0
Проблемы с UTF-8 и WIN1251
    #35706427
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите вывод:
1. psql -l -h localhost -p 5432 -U postgres
2. psql -h localhost -p 5432 -U postgres -с " select name, setting from pg_settings where name like 'lc_%'; "

покажите начало успешно выгруженого файла с sql, типа вот этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
--
-- PostgreSQL database dump
--

SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
в частности интересует что у Вас в дампе стоит в client_encoding ?



--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
Проблемы с UTF-8 и WIN1251
    #35707280
GRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш, добрый день.

Вот результаты:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
psql -h localhost -p  5432  -U postgres -c " select name, setting from pg_settings where name like 'lc_%'; "
Password for user postgres:
    name     |       setting
-------------+---------------------
 lc_collate  | Russian_Russia. 1251 
 lc_ctype    | Russian_Russia. 1251 
 lc_messages | Russian_Russia. 1251 
 lc_monetary | Russian_Russia. 1251 
 lc_numeric  | Russian_Russia. 1251 
 lc_time     | Russian_Russia. 1251 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
psql -l -h localhost -p  5432  -U postgres
Password for user postgres:
          ╤яшёюъ срч фрээ√ї
      ╚ь       | ┬ырфхыхЎ | ╩юфшЁютър
---------------+----------+-----------
 dbname_tst_2  | postgres | WIN1251
 template0     | postgres | WIN1251
 template1     | postgres | WIN1251


Начало успешно выгруженого файла с sql:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
--
-- PostgreSQL database dump
--
-- Started on 2008-12-09 12:08:15

SET client_encoding = 'WIN1251';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;


Кстати, cpch 1251 и шрифт Lucida Console не влияют на то, что при выводе списка баз данных я вижу:
Код: plaintext
╤яшёюъ срч фрээ√ї
...
Рейтинг: 0 / 0
Проблемы с UTF-8 и WIN1251
    #35707747
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, теперь понятно. с базой всё в порядке - просто для rails не была выставлена кодировка подключения. поэтому текст в utf-8 без переконвертирования сохранился и база считает что это нормальный текст в cp1251.

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

авторТеперь мне нужно перенести дамп на другую машину. на другой машине что показывают эти две команды psql ?

вообще, если Вы откроете текстовой дамп в кодировке cp1251 и исправите эту строку
Код: plaintext
SET client_encoding = 'WIN1251';
на
Код: plaintext
SET client_encoding = 'UTF8';
то у вас получится по идеи корректный и правильный дамп :)

но здесь есть одно НО, если там есть символы которые не представимы в кодировке установленной на машине где Вы будете его заливать, то залить Вам его опять не удастся.

GRomanКстати, cpch 1251 и шрифт Lucida Console не влияют на то, что при выводе списка баз данных я вижу:
Код: plaintext
╤яшёюъ срч фрээ√ї
влияют, просто Вы видимо что-то не так делаете :)
...
Рейтинг: 0 / 0
Проблемы с UTF-8 и WIN1251
    #35711689
GRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Поменял SET client_encoding на 'UTF8' и дамп загрузился нормально. А chcp не помогало, т.к. делал это из под Far'а. В cmd все корректно.
Теперь буду копать Ruby, а то файлы формируемые из этой софтины (Redmine) выгружаются в UTF, а нужен 1251.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с UTF-8 и WIN1251
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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