【问题标题】:PostgreSQL: Warning: Console code page (437) differs from Windows code page (1252)PostgreSQL:警告:控制台代码页 (437) 与 Windows 代码页 (1252) 不同
【发布时间】:2013-12-27 02:45:09
【问题描述】:

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

这个警告是什么意思?如何解决?

【问题讨论】:

  • @jww 您能否在此处发布有关 stackoverflow 与超级用户与数据库管理员指南的链接?

标签: postgresql database-connection warnings


【解决方案1】:

来自psql documentation

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

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

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

【讨论】:

  • 我也面临同样的问题。我尝试执行代码 1252 但错误仍然存​​在。在您的解决方案中,您提到了要做的 2 件事,但只描述了 1。您能否解释一下要做的第二件事
  • @Abhishek 我不确定你在问什么。 chcp 显示当前编码(又名代码页)。 chcp 1252 将编码更改为Latin 1 / Western European,用于德语。有关 Windows 代码页的更多详细信息,请参阅 wikipedia en.wikipedia.org/wiki/Windows_code_page
  • 第二件事是什么?
  • 我认为这是警告中引用的“Windows 用户注意事项”:postgresql.org/docs/current/static/app-psql.html(朝向页面底部)
  • chcp 1252 添加到 psql bat 文件本身会很有帮助,该文件在我的机器上位于“C:\Program Files\PostgreSQL\12\scripts\runpsql.bat”。
【解决方案2】:

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

  1. 开始 -> 运行 -> regedit
  2. 转到 [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor]
  3. 添加名为“Autorun”且值为“chcp 1252”的新字符串值

然后重新打开 CMD.exe

【讨论】:

  • 我知道这已经超过 2 年了,但由于它没有被接受的答案,我想说这对我有用。
【解决方案3】:

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

cmd.exe /c chcp 1252

在您安装 Postgre 的scripts 目录中。

例如,在我的情况下是

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

【讨论】:

  • 这对我不起作用。当我通过批处理文件打开终端时它可以工作。但是当我使用sql 时,警告仍然会弹出。
【解决方案4】:

打开 cmd.exe 并运行 regedit

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

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

完成。

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

【讨论】:

    【解决方案5】:

    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】:

      或者您可以在命令提示符窗口中直接输入cmd.exe /c chcp 1252

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          请不要假设 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%]: "
          

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

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

              【讨论】:

              • 我刚刚将 cmd.exe /c chcp 1252 粘贴到我在 Windows 10 上的命令提示符中,它工作正常。谢谢
              【解决方案11】:

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

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

              什么是 Windows 1252 编码?

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

              【讨论】:

                【解决方案12】:

                对于 Postgres 11

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

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

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

                【讨论】:

                  【解决方案13】:

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

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

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

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

                  here

                  【讨论】:

                  • 您能进一步解释一下吗?为什么您认为这会有所帮助?
                  • 代码页 1252 不是 utf8。如果是这样,我就不会收到 utf8 错误……它基本上是一个 iso 编码。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-08-28
                  • 1970-01-01
                  • 2018-11-09
                  • 1970-01-01
                  • 2014-06-06
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多