繁体   English   中英

PostgreSQL:警告:控制台代码页 (437) 与 Windows 代码页 (1252) 不同

[英]PostgreSQL: Warning: Console code page (437) differs from Windows code page (1252)

当我使用PostgreSQL数据库 SQL 提示中的\c testdb连接到数据库时,使用 PostgreSQL。 我成功连接到数据库,但收到以下警告:

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 检测到有问题的控制台代码页,它会在启动时警告您。

要更改控制台代码页,需要做两件事: 通过输入 cmd.exe /c chcp 1252 设置代码页。(1252 是适用于德语的代码页;将其替换为您的值。)如果您使用的是 Cygwin , 你可以把这个命令放在 /etc/profile.

因此,要删除该警告,您需要在输入psql之前执行chcp 1252 使用不带参数的chcp可为您提供当前代码页。

CMD.exe 的默认代码页与 postgres 的默认代码页不同...要使用 REGISTRY 更改 CMD.exe,请尝试以下操作:

  1. 开始 -> 运行 -> 注册表编辑器
  2. 转到 [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor]
  3. 添加名为“Autorun”的新字符串值,值为“chcp 1252”

然后重新打开 CMD.exe

为了使其更加明显,@user3423801 正在向其中添加该行的文件

cmd.exe /c chcp 1252

位于安装 Postgre 的scripts目录中。

例如,就我而言,它是

C:\Program Files\PostgreSQL\9.3\scripts\runpsql.bat

打开 cmd.exe 并运行regedit

转到Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

新建一个名为: Autorun的字符串值并将该值更改为chcp 1252

完毕。

参考: https ://stackoverflow.com/a/30100565/8396969

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%]: "

或者您可以简单地在命令提示符窗口中键入cmd.exe /c chcp 1252

请不要假设 Unix 修复程序适用于 Windows 用户。 对于 Windows 10 和 PostgreSQL 12,结合“user3423801”和“数字更长”的答案对我有用。 (Windows Registry hack 不起作用。我还没有尝试重新启动。)无论如何最好在 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%]: "

您只需转到 power-shell 或 cmd.exe 并键入命令chcp 1252或任何它想要的页码“即 Windows 代码页”。 如果问题仍然存在,只需打开控制台属性“通过单击控制台窗口左上角的电源外壳图标并从下拉菜单中选择属性”并将字体更改为“Lucida Console”。 它对我有用,但是您必须以管理员身份打开 power-shell。

经过大量挖掘对我来说有意义的答案后,我在 PostgreSQL 站点上找到了这个帮助电子邮件链,它基本上说从打开的命令窗口内运行chcp 1252 然后我能够在没有代码警告的情况下运行我的 PostgreSQL 命令。

注意:此更改不会持续存在,因此您每次打开计划使用 PostgreSQL 命令的新命令窗口时都必须运行它。

我不知道如何在全球范围内为 Cygwin 设置它。 这似乎在我的 bash 脚本中有效

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

上面的答案没问题,但不要提及 Windows 1252 编码适用于英语版本的 Windows 和其他西欧语言的任何地方。 对于那些可能对上述德语编码应用感到困惑的人来说,这就完成了答案。 是的,它适用于没有变音符号和德语、西班牙语、法语、意大利语、罗马尼亚语、匈牙利语等所需的其他特殊字符的英语。

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

什么是 Windows 1252 编码?

Windows-1252 或 CP-1252(代码页 1252)是拉丁字母的单字节字符编码,在 Microsoft Windows 的旧版组件中默认使用英语和其他一些西方语言(其他语言使用不同的默认编码)。

对于Postgres 11

“警告:控制台代码页 (437) 与 Windows 代码页 (1252) 不同,8 位字符可能无法正常工作。有关详细信息,请参阅 psql 参考页“Windows 用户注意事项”。”

如果您不是计算机上的管理员,请在 postgres 安装的基本目录中找到的 pg_env.bat 脚本中添加一行“chcp 1252”。 即“C:\Program Files\PostgreSQL\11”

如果您是计算机上的管理员,您可以修改注册表以在每次运行“cmd.exe”时运行该行,如上所述。

基本上,将控制台应用程序编码从 8 位设置为utf-8 Windows 1252。

对于git bash用户,在运行 postgres 之前运行命令chcp.com 1252

chcp 是一个 Windows 控制台命令,因此要在 git bash 上执行它,您可能需要添加.com

git bash 无法自行将 chcp 扩展为完整的可执行文件,因此您需要键入完整的命令。

这里

  1. 在终端屏幕上 go 到以下目录;
    C:\Program Files\PostgreSQL\14\bin

注意:无论您使用哪个数据库版本,go 到 db 版本文件的bin 文件夹

  1. 在创建用户或访问数据库用户之前,必须编写以下代码;
    cmd.exe /c chcp 1252

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM