web-dev-qa-db-ja.com

PostgreSQL:警告:コンソールコードページ(437)はWindowsコードページ(1252)と異なります

PostgreSQLデータベースのSQLプロンプト内で\c testdbを使用して、データベースにPostgreSQLを使用する場合connectを使用します。私はデータベースに正常に接続しましたが、次の警告が表示されました:

postgres-# \c testdb
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
You are now connected to database "testdb" as user "postgres".
testdb-#

この警告はどういう意味ですか?それを解決するには?

29
Yousuf Memon

psqlのドキュメント から:

psqlは「コンソールアプリケーション」として構築されています。 Windowsコンソールウィンドウはシステムの他の部分とは異なるエンコーディングを使用するため、psql内で8ビット文字を使用する場合は特別な注意が必要です。 psqlが問題のあるコンソールコードページを検出すると、起動時に警告を表示します。

コンソールのコードページを変更するには、次の2つが必要です。cmd.exe/c chcp 1252と入力してコードページを設定します(1252はドイツ語に適したコードページです。値に置き換えてください)。Cygwinを使用している場合、このコマンドを/ etc/profileに置くことができます。

したがって、その警告を削除するには、psqlを入力する前にchcp 1252を実行する必要があります。パラメータなしでchcpを使用すると、現在のコードページが表示されます。

23
dvdgsng

さらにわかりやすくするために、@ user3423801が行を追加しているファイル

cmd.exe /c chcp 1252

postgreをインストールしたscriptsディレクトリにあります。

たとえば、私の場合は

C:\Program Files\PostgreSQL\9.3\scripts\runpsql.bat
6
numbers longer

CMD.exeのデフォルトのコードページは、postgresのデフォルトとは異なります... REGISTRYを使用してCMD.exeを変更するには、次を試してください。

  1. スタート->実行-> regedit
  2. [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor]に移動します
  3. 「自動実行」という名前の新しい文字列値を「chcp 1252」という値で追加します

次に、CMD.exeを再度開きます。

3
user3344137

または、単にcmd.exe /c chcp 1252コマンドプロンプトウィンドウで。

3
iusting

Cmd.exeを開き、regeditを実行します。

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processorに移動

Autorunという名前の文字列値を新規作成し、値をchcp 1252に変更します

できました。

リファレンス: https://stackoverflow.com/a/30100565/8396969

2
user8396969

Dvdgsngの答えは正しいですが、コード例ではより明確です。

@echo off

REM Copyright (c) 2012-2014, EnterpriseDB Corporation.  All rights reserved

REM PostgreSQL server psql runner script for Windows

cmd.exe /c chcp 1252

SET server=localhost
SET /P server="Server [%server%]: "
1
user3423801

上記の回答は問題ありませんが、Windows 1252エンコーディングが英語版のWindowsや他の西ヨーロッパ言語に適していることはどこにも触れないでください。これで、ドイツ語エンコーディングへの前述のアプリケーションについて混乱する可能性のある人々のための答えが完成しました。はい、ドイツ語、スペイン語、フランス語、イタリア語、ルーマニア語、ハンガリー語などに必要なウムラウトやその他の特殊文字がなくても英語で機能します。

https://en.m.wikipedia.org/wiki/Windows-1252

Windows 1252エンコーディングとは何ですか?

Windows-1252またはCP-1252(コードページ1252)は、ラテンアルファベットのシングルバイト文字エンコードで、Microsoft Windowsのレガシーコンポーネントで英語およびその他の一部の西欧言語(他の言語では異なるデフォルトエンコードを使用)でデフォルトで使用されます。

1

Unixの修正がWindowsユーザーに対して機能するとは限りません。 Windows 10およびPostgreSQL 12の場合、「user3423801」と「numbers long」の回答を組み合わせるとうまくいきました。 (Windowsレジストリハックは機能しません。まだ再起動はしていません。)とにかく、PSQL起動スクリプトで修正することをお勧めします。

ファイルの場所C:\Program Files\PostgreSQL\12\scriptsには、ファイルrunpsql.batが含まれています。このファイルの正しい場所にcmd.exe /c chcp 1252 commandを挿入する必要があります。したがって、編集したファイルの先頭は、下の5行または6行のようになります。

@echo off

REM Copyright (c) 2012-2014, EnterpriseDB Corporation.  All rights reserved

REM PostgreSQL server psql runner script for Windows

cmd.exe /c chcp 1252

SET server=localhost
SET /P server="Server [%server%]: "
1

Cygwinにグローバルに設定する方法を理解できませんでした。これは私のbashスクリプトでも機能するようです

#!/bin/bash
cmd.exe /c chcp 1252 && psql -h myserver.postgres.database.Azure.com -U myuser@prod-au -d mydatabase
1
Damien Sawyer

基本的に、コンソールアプリケーションのエンコーディングを8ビットからutf-8に設定します。

git bashユーザーの場合、postgresを実行する前にコマンドchcp.com 1252を実行します

chcpはWindowsコンソールコマンドであるため、git bashで実行するには、.comを追加する必要がある場合があります。

git bashはchcpをそれ自体で完全な実行可能ファイルに拡張できないため、完全なコマンドを入力する必要があります。

ここ

0
You sir

Postgres 11の場合

「警告:コンソールコードページ(437)はWindowsコードページ(1252)とは異なります。8ビット文字は正しく機能しない可能性があります。詳細については、psqlリファレンスページの「Windowsユーザー向けの注意事項」を参照してください。」

マシンの管理者でない場合 postgresインストールのベースディレクトリにあるpg_env.batスクリプトに「chcp 1252」という行を追加します。つまり、「C:\ Program Files\PostgreSQL\11」

お使いのマシンの管理者の場合レジストリを変更して、上記の「cmd.exe」を実行するたびにこの行を実行できます。

0
M The Developer

私にとって理にかなった答えを探したところ、基本的に開いているコマンドウィンドウ内からchcp 1252を実行するように指示されているPostgreSQLサイトで help email chain を見つけました。その後、コード警告なしでPostgreSQLコマンドを実行することができました。

注:この変更は持続しないため、PostgreSQLコマンドを使用する予定の新しいコマンドウィンドウを開くたびに実行する必要があります。

0
amraby