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

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
(Молодость за 80 российских. Сделай жизнь приятнее)
м (Откат правок 46.0.218.231 (обсуждение) к версии 95.28.187.147)
Строка 1: Строка 1:
Все что Вы искали по не дорогим ценам (ниже в 1,5-2 раза чем у всех) - У нас самые ответссвенные работники. Мы Вам гарантируем 100% анонимность. Наш товар дешевле намного чем в аптеках, так как фирмы выпустившие их не разрабатывали и несли сильных потерь, а купили у официальных диллеров технологию производства. Благодоря этому мы можем Вам предлагать на порядок ниже по цене чем во многих магазинах. Нашим товаром широко пользуются не первый уже год. Мы всегда работаем на клиента и самое главное - это качество! К примеру виагра стоит на данный момент от 75 рублей! Это самые низкие цены в интернете! Самые дешевые цены только у нас так как мы лидеры на этом рынке
[[Файл: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]]
 
[[Категория:Погроммирование]]

Версия от 03:09, 28 февраля 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

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

Проверяем: