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-#
この警告はどういう意味ですか?それを解決するには?
psqlのドキュメント から:
psqlは「コンソールアプリケーション」として構築されています。 Windowsコンソールウィンドウはシステムの他の部分とは異なるエンコーディングを使用するため、psql内で8ビット文字を使用する場合は特別な注意が必要です。 psqlが問題のあるコンソールコードページを検出すると、起動時に警告を表示します。
コンソールのコードページを変更するには、次の2つが必要です。cmd.exe/c chcp 1252と入力してコードページを設定します(1252はドイツ語に適したコードページです。値に置き換えてください)。Cygwinを使用している場合、このコマンドを/ etc/profileに置くことができます。
したがって、その警告を削除するには、psql
を入力する前にchcp 1252
を実行する必要があります。パラメータなしでchcp
を使用すると、現在のコードページが表示されます。
さらにわかりやすくするために、@ user3423801が行を追加しているファイル
cmd.exe /c chcp 1252
postgreをインストールしたscripts
ディレクトリにあります。
たとえば、私の場合は
C:\Program Files\PostgreSQL\9.3\scripts\runpsql.bat
CMD.exeのデフォルトのコードページは、postgresのデフォルトとは異なります... REGISTRYを使用してCMD.exeを変更するには、次を試してください。
次に、CMD.exeを再度開きます。
または、単にcmd.exe /c chcp 1252
コマンドプロンプトウィンドウで。
Cmd.exeを開き、regedit
を実行します。
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
に移動
Autorun
という名前の文字列値を新規作成し、値をchcp 1252
に変更します
できました。
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%]: "
上記の回答は問題ありませんが、Windows 1252エンコーディングが英語版のWindowsや他の西ヨーロッパ言語に適していることはどこにも触れないでください。これで、ドイツ語エンコーディングへの前述のアプリケーションについて混乱する可能性のある人々のための答えが完成しました。はい、ドイツ語、スペイン語、フランス語、イタリア語、ルーマニア語、ハンガリー語などに必要なウムラウトやその他の特殊文字がなくても英語で機能します。
https://en.m.wikipedia.org/wiki/Windows-1252
Windows 1252エンコーディングとは何ですか?
Windows-1252またはCP-1252(コードページ1252)は、ラテンアルファベットのシングルバイト文字エンコードで、Microsoft Windowsのレガシーコンポーネントで英語およびその他の一部の西欧言語(他の言語では異なるデフォルトエンコードを使用)でデフォルトで使用されます。
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%]: "
Cygwinにグローバルに設定する方法を理解できませんでした。これは私のbashスクリプトでも機能するようです
#!/bin/bash
cmd.exe /c chcp 1252 && psql -h myserver.postgres.database.Azure.com -U myuser@prod-au -d mydatabase
基本的に、コンソールアプリケーションのエンコーディングを8ビットからutf-8に設定します。
git bashユーザーの場合、postgresを実行する前にコマンドchcp.com 1252
を実行します
chcpはWindowsコンソールコマンドであるため、git bashで実行するには、.com
を追加する必要がある場合があります。
git bashはchcpをそれ自体で完全な実行可能ファイルに拡張できないため、完全なコマンドを入力する必要があります。
Postgres 11の場合
「警告:コンソールコードページ(437)はWindowsコードページ(1252)とは異なります。8ビット文字は正しく機能しない可能性があります。詳細については、psqlリファレンスページの「Windowsユーザー向けの注意事項」を参照してください。」
マシンの管理者でない場合 postgresインストールのベースディレクトリにあるpg_env.batスクリプトに「chcp 1252」という行を追加します。つまり、「C:\ Program Files\PostgreSQL\11」
お使いのマシンの管理者の場合レジストリを変更して、上記の「cmd.exe」を実行するたびにこの行を実行できます。
私にとって理にかなった答えを探したところ、基本的に開いているコマンドウィンドウ内からchcp 1252
を実行するように指示されているPostgreSQLサイトで help email chain を見つけました。その後、コード警告なしでPostgreSQLコマンドを実行することができました。
注:この変更は持続しないため、PostgreSQLコマンドを使用する予定の新しいコマンドウィンドウを開くたびに実行する必要があります。