gpt4 book ai didi

java - JDBC 中 Postgresql 消息的错误编码

转载 作者:行者123 更新时间:2023-11-29 12:12:40 24 4
gpt4 key购买 nike

我有一个用 Java 编写的连接到 Postgresql 9.3 数据库的应用程序。

  1. 我要连接的数据库是使用 UTF-8 编码创建的。
  2. 安装数据库的服务器的语言环境是 es-uy.UTF-8。
  3. 从应用程序(在 Tomcat 7 中运行的网络应用程序)提交的所有信息也采用 UTF-8 格式。

一切都根据编码设置工作除了 JDBC 异常消息。如果我尝试使用错误的密码连接到数据库,我会得到:

org.postgresql.util.PSQLException: FATAL: la autentificaci��n password fall�� para el usuario ��postgres��

如果我在 psql 或 pgadmin 中尝试相同的操作,我会收到具有正确编码的消息:

psql: FATAL:  la autentificación password falló para el usuario «postgres»

这里有什么问题吗?

最佳答案

看起来 PgJDBC 在经过身份验证和连接后设置客户端编码,而不是在协议(protocol)启动数据包中。所以服务器不知道 PgJDBC 期望的编码并使用其默认编码 - 但 PgJDBC 必须忽略服务器关于服务器编码的通知。

这显然是一个错误;如果时间允许,我会追上去。

不过,我这里的协议(protocol)流程顺序可能有误。我认为启动数据包携带编码并发送预授权。如果我错了,那么这是一个协议(protocol)问题,需要协议(protocol)版本来修复——既不快速也不简单。

我会检查。同时here's the pgjdbc bug .

(附带说明,PostgreSQL 还在其日志文件中混合了不同的文本编码,造成了可怕的困惑,因为它向 client_encoding 中的日志发出日志消息。我已经看过修复这以前有过,但我认为唯一可能的修复方法一直存在阻力——每个数据库一个日志文件并记录数据库默认编码,或者最好只记录 utf-8 中的所有内容)。

关于java - JDBC 中 Postgresql 消息的错误编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com