PostgreSQL - Кириллица в psql под Windows: различия между версиями

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
(Ремонт офисов в Спб)
м (Откат правок 109.195.85.122 (обсуждение) к версии Bit)
Строка 1: Строка 1:
Штукатурные работы в Санкт-Петербурге. У нашей ремонтно-строительной компании уже наработан большой опыт и достаточная материально-техническая база. Мы применяем технику машинного нанесения штукатурки для больших промышленных объектов, а это дает высокую скорость выполнения. Для жилых и офисных помещений мы можем предложить декоративную штукатурку и элитные типы отделки. Все выполняется только на современном оборудовании и при помощи современных материалов. На работу дается гарантия, а цены вы можете увидеть на сайте.1948yjls
[[Файл:Postgresql logo.png|right]]
 
В статье пойдёт речь о том, как добиться корректного вывода кириллицы в "консоли" Windows (<code>cmd.exe</code>).
 
== Описание проблемы ==
 
В дистрибутив PostgreSQL, помимо всего прочего, для работы с СУБД входит:
* приложение с графическим интерфейсом <code>pgAdmin</code>;
* консольная утилита <code>psql</code>.
 
При работе с <code>psql</code> в среде Windows пользователи <s>всегда</s> довольно часто сталкиваются с проблемой вывода кириллицы. Например, при отображении результатов запроса к таблице, в полях которых хранятся строковые данные на русском языке.
 
[[Файл:Psql.codepage.fail.png|center]]
 
Ну и зачем тогда работать с <code>psql</code>, кому нужно долбить клавиатурой в консольке, когда можно всё сделать красиво и быстро в <code>pgAdmin</code>? Ну, не всегда <code>pgAdmin</code> доступен, особенно если речь идёт об удалённой машине. Кроме того, выполнение SQL-запросов в текстовом режиме консоли - это +10 к [http://lurkmore.to/%D0%9A%D1%83%D0%BB%D1%85%D0%B0%D1%86%D0%BA%D0%B5%D1%80 хакирству].
 
== Решение проблемы ==
 
Версии ПО:
* MS Windows 7 SP1 x64;
* PostgreSQL 8.4.12 x32.
 
На сервере имеется БД, созданная в кодировке UTF8.
 
=== Суть ===
 
Суть проблемы в том, что <code>cmd.exe</code> работает (и так будет до скончания времён) в кодировке <code>CP866</code>, а сама Windows - в <code>WIN1251</code>, о чём <code>psql</code> предупреждает при начале работы:
 
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. Ничего этого делать не нужно, достаточно всего трёх шагов:
# сменить шрифт у <code>cmd.exe</code>;
# сменить текущую кодовую страницу <code>cmd.exe</code>;
# сменить кодировку на стороне клиента в <code>psql</code>.
 
=== Конкретные действия ===
 
==== Супер быстро и просто ====
 
Запускаете <code>cmd.exe</code>, оттуда <code>psql</code>:
 
psql -d ВАШАБАЗА -U ВАШЛОГИН
 
Далее:
 
psql \! chcp 1251
 
[[Файл:Posgresql console 1251.png|400px]]
 
==== Быстро и просто ====
 
Запускаете <code>cmd.exe</code>, оттуда <code>psql</code>:
 
psql -d ВАШАБАЗА -U ВАШЛОГИН
 
Вводите пароль (если установлен) и выполняете команду:
 
set client_encoding='WIN866';
 
И всё. Теперь результаты запроса, содержащие кириллицу, будут отображаться нормально. Но есть небольшой косяк:
 
[[Файл:Psql.codepage.866.png|center]]
 
Потому предлагаем ещё способ, который этого недостатка лишён.
 
==== Посложнее и подольше ====
 
Запустить <code>cmd.exe</code>, нажать мышью в <s>правом</s> левом верхнем углу окна, там Свойства - Шрифт - выбрать Lucida Console. Нажать ОК.
 
[[Файл:Psql.console.font.png|center]]
 
Выполнить команду:
 
chcp 1251
 
В ответ выведет:
 
Текущая кодовая страница: 1251
 
Запустить <code>psql</code>;
 
psql -d ВАШАБАЗА -U ВАШЛОГИН
 
Кстати, обратите внимание - теперь предупреждения о несовпадении кодировок нет.
 
Выполнить:
 
set client_encoding='win1251';
 
Он выведет:
 
SET
 
Всё, теперь кириллица будет нормально отображаться.
 
Проверяем:
 
[[Файл:Psql.codepage.ok.png|center]]
 
[[Категория:Погроммирование]]

Версия от 14:08, 5 марта 2017

В статье пойдёт речь о том, как добиться корректного вывода кириллицы в "консоли" Windows (cmd.exe).

Описание проблемы

В дистрибутив 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. Ничего этого делать не нужно, достаточно всего трёх шагов:

  1. сменить шрифт у cmd.exe;
  2. сменить текущую кодовую страницу cmd.exe;
  3. сменить кодировку на стороне клиента в 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

Всё, теперь кириллица будет нормально отображаться.

Проверяем: