java – sql查询中的外部/重音字符

我正在使用Java和Spring的JdbcTemplate类在Java中构建一个查询Postgres数据库的SQL查询.但是,我在执行包含外部/重音字符的查询时遇到问题.例如(修剪)代码:JdbcTemplate select = new JdbcTemplate( postgresDataba...

我正在使用Java和Spring的JdbcTemplate类在Java中构建一个查询Postgres数据库的SQL查询.但是,我在执行包含外部/重音字符的查询时遇到问题.

例如(修剪)代码:

JdbcTemplate select = new JdbcTemplate( postgresDatabase );

String query = "SELECT id FROM province WHERE name = 'Ontario';";

Integer id = select.queryForObject( query, Integer.class );

将检索省id,但如果我改名为”Québec’,则查询无法返回任何结果(此值在数据库中,因此问题不在于它丢失).

我认为问题的根源是我需要使用的数据库将默认客户端编码设置为SQL_ASCII,根据this,它会阻止自动字符集转换. (当我告诉数据库使用’LATIN1’/’ISO-8859-1’时,Java环境编码设置为’UTF-8′)

当resultSets包含具有外来字符的值作为先前具有类似性质的问题的解决方案时,我能够手动指示编码.

例如:

String provinceName = new String ( resultSet.getBytes( "name" ), "ISO-8859-1" );

但是现在外来字符是查询本身的一部分,这种方法还没有成功. (我想,因为查询必须在执行之前保存在String中,然后将其分解为字节,然后更改编码只会使字符进一步混乱.)

有没有办法解决这个问题,而无需更改数据库的属性或重建它?

PostScript:我在编写标题时在StackOverflow上找到了this function,它似乎没有用(我可能没有正确使用它,但即使它确实有效,它似乎不是它可能是最好的解决方案.):

编辑:我为此选择了自己的答案,因为它将是我现在使用的;但是,如下面的评论所述,我很乐意看到其他可能更好的建议,只要我有权访问数据库.

解决方法:

如果从Java连接编码UTF-8并且数据库是ISO-8859-1,那么您应该在最初连接到DB之后运行此SQL命令:

SET client_encoding = 'UTF8';

然后PostgreSQL将所有输入解释为UTF-8,然后在服务器端将其转换为ISO-8859-1.除此之外你不应该做任何其他事情.

本文标题为:java – sql查询中的外部/重音字符

基础教程推荐