SQL 查询中的外语/重音字符

2024-05-01

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

例如(修剪后的)代码:

JdbcTemplate select = new JdbcTemplate( postgresDatabase );

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

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

将检索省份 ID,但如果我这样做了name = 'Québec'那么查询无法返回任何结果(该值位于数据库中,因此问题不在于它丢失)。

我相信问题的根源在于我需要使用的数据库的默认客户端编码设置为 SQL_ASCII,根据this http://www.postgresql.org/docs/8.1/static/multibyte.html防止自动字符集转换。 (Java 环境编码设置为“UTF-8”,而我被告知数据库使用“LATIN1”/“ISO-8859-1”)

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

Ex:

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

但现在外来字符是查询本身的一部分,这种方法还没有成功。 (我想,由于无论如何在执行之前查询都必须保存在字符串中,因此将其分解为字节然后更改编码只会进一步混淆字符。)

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

后记:我发现这个功能 https://stackoverflow.com/questions/1659158/converting-accented-characters-in-postgresql在 StackOverflow 上编写标题时,它似乎不起作用(我可能没有正确使用它,但即使它确实起作用,它似乎也不是最好的解决方案。):

编辑:我为此选择了自己的答案,因为这将是我现在使用的;然而,正如下面的评论中提到的,只要我有权访问数据库,我很乐意查看其他可能更好的建议。


嗯,好吧,在仔细研究了 postgreSQL 文档之后,我在字符串函数和运算符 http://www.postgresql.org/docs/8.4/interactive/functions-string.html#CONVERSION-NAMES部分。

我用的是convert(string bytea, src_encoding name, dest_encoding name)函数并设法获取魁北克省的省 ID。

Ex.

String query = "SELECT id FROM province WHERE name = convert( 'Québec', 'UTF-8', 'ISO-8859-1' );"; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 查询中的外语/重音字符 的相关文章

随机推荐