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

时间:2013-12-27 02:45:09

标签: postgresql database-connection warnings

在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-#

这个警告意味着什么?如何解决?

13 个答案:

答案 0 :(得分:21)

来自psql documentation

  

psql构建为“控制台应用程序”。自Windows控制台   Windows必须使用与系统其他部分不同的编码   在psql中使用8位字符时要特别小心。如果psql   检测到有问题的控制台代码页,它会在启动时发出警告。

     

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

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

答案 1 :(得分:5)

为了使它更加明显,@ user3423801正在添加行

的文件
cmd.exe /c chcp 1252

位于您安装Postgre的scripts目录中。

例如,在我的情况下,它是

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

答案 2 :(得分:3)

或者您只需在“命令提示符”窗口中键入cmd.exe /c chcp 1252即可。

答案 3 :(得分:2)

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

  1. 开始 - >运行 - >注册表编辑器
  2. 转到[HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command Processor]
  3. 添加名为&#34的新字符串值;自动运行"有价值" chcp 1252"
  4. 然后重新打开CMD.exe

答案 4 :(得分:2)

打开cmd.exe并运行regedit

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

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

完成。

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我不知道如何在全球范围内为Cygwin设置它。尽管在我的bash脚本中,这似乎可行

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

答案 7 :(得分:1)

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

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

什么是Windows 1252编码?

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

答案 8 :(得分:1)

请不要以为Windows用户可以使用Unix修复程序。对于Windows 10和PostgreSQL 12,将“ user3423801”和“数字更长”的答案结合起来对我来说很有效。 (Windows注册表黑客无法正常工作。我还没有尝试重新启动。)最好还是在PSQL启动脚本中修复它。

文件位置False包含文件C:\Program Files\PostgreSQL\12\scripts,您必须在正确的位置插入runpsql.bat。因此,已编辑文件的顶部应看起来像下面的5或6行。

cmd.exe /c chcp 1252 command

答案 9 :(得分:1)

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

答案 10 :(得分:0)

在深入挖掘对我有用的答案之后,我在PostgreSQL站点找到了这个help email chain,它基本上就是在打开的命令窗口中运行chcp 1252。 然后我能够在没有代码警告的情况下运行我的PostgreSQL命令。

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

答案 11 :(得分:0)

对于 Postgres 11

  

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

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

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

答案 12 :(得分:0)

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

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

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

  

git bash不能单独将chcp扩展为完整的可执行文件,因此您需要键入完整的命令。

here