【问题标题】:Encoding with PostgreSQL ODBC driver (32-bit)使用 PostgreSQL ODBC 驱动程序(32 位)进行编码
【发布时间】:2026-01-12 23:15:01
【问题描述】:

我在使用 ODBC 驱动程序时遇到了字符编码问题。 我正在尝试使用 Excel 2013 从内部 PostgreSQL 服务器中检索一些数据, 但是日文字符会出现乱码或被空字符串替换。

这是我使用的:

  • [客户端] Windows 7 Enterprise 32 位和 Excel 2013 32 位
  • [ODBC 驱动程序] psqlodbc_09_05_0400-x86
  • [服务器] i686-pc-linux-gnu 上的 PostgreSQL 8.2.3,由 GCC gcc (GCC) 3.4.6 编译

服务器上的编码设置:

  • server_encoding=SQL_ASCII
  • client_encoding=SJIS

注意事项:

  • 驱动程序(“PostgreSQL Unicode”和“PostgreSQL ANSI”)都不起作用。
  • 我已将以下字符串分别设置为“ConnSettings”选项(在连接字符串中),但无济于事:
    • 将 CLIENT_ENCODING 设置为“SJIS”
    • 将 CLIENT_ENCODING 设置为“EUC_JP”
    • SET CLIENT_ENCODING = 'SJIS'
    • SET CLIENT_ENCODING = 'EUC_JP'

  • 我尝试了“pgAdmin”应用,但无法摆脱乱码。

如何避免字符乱码?
任何意见将不胜感激。

【问题讨论】:

    标签: windows postgresql encoding odbc excel-2013


    【解决方案1】:

    你的问题是SQL_ASCII的服务器编码。

    使用这种服务器编码,PostgreSQL 不支持编码并且不会执行字符转换,因此您的客户端接收到的数据就像它们在数据库中一样。如果这不正确,那你就不走运了。

    正确的解决方案是使用不同的服务器编码,例如 EUC_JP 或(更好的)UTF8

    客户端编码应该是SJIS

    【讨论】:

    • 感谢@LaurenzAlbe 的评论。我通过以下解决方法解决了我的问题:我的一位资深同事有一个旧版本 ODBC 驱动程序的安装程序(我无法确定确切的版本,但它的最后更新日期是 2005 年,所以可能在 08 版左右)。安装后,我可以在 ODBC 数据源管理器中选择“PostgreSQL”(没有像 ANSI/Unicode 这样的后缀)。除了使用它之外,我在 Excel 中选择了“Microsoft Query”而不是“Data Connection Wizard”。这是摆脱字符乱码的唯一方法。
    • 那么你很幸运编码恰好匹配。