【发布时间】:2021-01-07 04:50:33
【问题描述】:
使用 Java 8 和 Postgres 10 服务器,以及 v 42.2.16 Postgresql 驱动程序, 我有一个基本的 JDBC 查询函数:
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;
}
我执行这样的查询:
Query("SELECT * FROM bi_functions");
但是会抛出异常
org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0xa3
数据库(由第 3 方提供)编码为 SQL_ASCII。 0xA3 是“英镑”字符。
所以我将查询更改为:
SET LOCAL CLIENT_ENCODING TO 'SQL_ASCII'; SELECT * FROM bi_functions;
它失败了:
org.postgresql.util.PSQLException:服务器的 client_encoding 参数已更改为 SQL_ASCII。 JDBC 驱动程序要求 client_encoding 为 UTF8 才能正确操作。
有没有办法使用普通的 JDBC 来规避这个错误?
【问题讨论】:
-
不,你不能那样做。有趣的问题是:服务器编码是什么,数据库中存储了哪些字节?
-
DB(由第 3 方提供)已编码 SQL_ASCII。 0xA3 是“英镑”字符。你是说我不能通过 JDBC 读取这个数据库?
标签: java postgresql jdbc encoding