我正在使用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查询中的外部/重音字符


基础教程推荐
- JSP实用教程之简易文件上传组件的实现方法(附源码) 2023-08-01
- jsp有两个按钮来控制Timer的开始和结束方法 2023-08-01
- Spring Boot 集成Redisson实现分布式锁详细案例 2023-03-31
- JVM调优OutOfMemoryError异常分析 2023-07-01
- Java Web开发中过滤器和监听器使用详解 2023-06-30
- 【笔记】linux下的java环境配置 2023-09-01
- Spring创建bean实例的几种方式分享 2023-02-26
- Springboot允许logger.debug输出日志方式 2023-02-10
- Java设计模式之解释器模式 2023-06-06
- 深入了解SpringMVC初始化流程 2023-02-19