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

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
Строка 25: Строка 25:
=== Суть ===
=== Суть ===


Суть проблемы в том, что <code>cmd.exe</code> работает (и так будет до скончания времён) в кодировке <code>CP866</code>, а сама Windows - в <code>WIN2151</code>, о чём psql предупреждает при начале работы:
Суть проблемы в том, что <code>cmd.exe</code> работает (и так будет до скончания времён) в кодировке <code>CP866</code>, а сама Windows - в <code>WIN2151</code>, о чём <code>psql</code> предупреждает при начале работы:


  WARNING: Console code page (866) differs from Windows code page (1251)
  WARNING: Console code page (866) differs from Windows code page (1251)

Версия от 12:08, 28 мая 2013

В статье пойдёт речь о том, как добиться корректного вывода кириллицы в "консоли" 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 - в WIN2151, о чём 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.

Конкретные действия

Запустить cmd.exe, нажать мышью в правом верхнем углу окна, там Свойства - Шрифт - выбрать Lucida Console. Нажать ОК.

Выполнить команду:

chcp 1251

В ответ выведет:

Текущая кодовая страница: 1251

Запустить psql;

psql -d ВАШАБАЗА -U ВАШЛОГИН

Теперь предупреждения о несовпадении кодировок не будет.

Выполнить:

set client_encoding='win1251';

Он выведет:

SET

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