PostgreSQL - Кириллица в psql под Windows: различия между версиями
(Рюкзаки оптом Санкт-Петербург) |
Bit (обсуждение | вклад) м (Откат правок 109.195.85.122 (обсуждение) к версии Bit) |
||
Строка 1: | Строка 1: | ||
[[Файл: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]] | |||
[[Категория:Погроммирование]] |
Версия от 09:43, 21 июня 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. Ничего этого делать не нужно, достаточно всего трёх шагов:
- сменить шрифт у
cmd.exe
; - сменить текущую кодовую страницу
cmd.exe
; - сменить кодировку на стороне клиента в
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
Всё, теперь кириллица будет нормально отображаться.
Проверяем: