首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论是否使用UTF8编码,Postgresql/JDBC都会失败。

无论是否使用UTF8编码,Postgresql/JDBC都会失败。
EN

Stack Overflow用户
提问于 2020-09-21 04:56:38
回答 1查看 1.7K关注 0票数 0

使用Java 8和Postgres 10 Server以及v42.2.16 Postgresql驱动程序,我有一个基本的JDBC查询函数:

代码语言:javascript
复制
public List<Map<String, Object>> Query(String sql) throws Exception {
    Connection con = null ;
    PreparedStatement pstmt;
    List<Map<String, Object>> resultSetToList = null;
    try {
        
        con = DriverManager.getConnection(ConnectionString, Properties);
        pstmt = con.prepareStatement( sql );
        pstmt.execute();
        
        ResultSet resultSet = pstmt.getResultSet();
        resultSetToList = resultSetToList(resultSet);

        pstmt.close();

    } catch(Exception e){
        throw e;
    }
        finally {
    
        if (con != null)
            con.close();
    }
    return resultSetToList;
}

我执行这样的查询:

代码语言:javascript
复制
Query("SELECT * FROM bi_functions");

但它会抛出一个异常

org.postgresql.util.PSQLException: ERROR:编码"UTF8":0xa3的无效字节序列

数据库(由第三方提供)具有编码SQL_ASCII。0xA3是“英磅”字。

因此,我将查询更改为:

代码语言:javascript
复制
SET LOCAL CLIENT_ENCODING TO 'SQL_ASCII'; SELECT * FROM bi_functions;

它失败了,因为:

org.postgresql.util.PSQLException:服务器的client_encoding参数被更改为SQL_ASCII。为了进行正确的操作,JDBC驱动程序需要client_encoding为UTF8。

是否有一种使用普通JDBC来避免此错误的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-21 06:12:04

Java在内部使用Unicode编码,因此您不能在JDBC驱动程序中使用不同于client_encodingUTF8

您应该计算出数据库的实际编码(可能是ISO 8859或Windows编码之一)。然后使用该编码创建一个数据库,并转储原始数据库并将您的转储数据库加载到其中。

否则,您将无法在JDBC中使用此数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63986397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档