我想按标题进行如下查询:
String title = "transfusión";
String sql = "SELECT id FROM graph WHERE title=?";
PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, title);
st.executeQuery();问题是标题列字符集是latin1,而我的java文件编码是utf8。当title变量包含特殊字符(如重音)时,查询将永远找不到结果。
我使用的是一个MySQL数据库,连接网址是:
jdbc:mysql://mysite:3306/mydatabase?autoReconnect=true&characterEncoding=latin1&useOldAliasMetadataBehavior=true
我尝试了使用useUnicode=true/false或characterEncoding=latin1/utf8/auto的多种替代方法,但没有得到任何结果。
此外,在准备如下语句之前,我尝试将title和sql转换为ISO8859-1:
title = new String(title.getBytes("UTF-8"), "ISO-8859-1");
sql = new String(sql.getBytes("UTF-8"), "ISO-8859-1");我不能更改数据库的字符集,因为我不是管理员.
我该怎么解决呢?
警察:对不起我的英语。
发布于 2015-12-22 17:13:13
请参见表5.3 MySQL到:
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-charsets.html
jdbc:mysql://mysite:3306/mydatabase?autoReconnect=true&characterEncoding= Cp1252&useOldAliasMetadataBehavior=true
发布于 2015-12-23 10:37:46
谢谢你@Harlam。你的解决方案不完全正确,但你帮我找到了正确的答案。我必须将标题变量转换为Cp1252而不是ISO-8859-1,并且它工作得很好:
title = new String(title.getBytes("UTF-8"), "Cp1252");
https://stackoverflow.com/questions/34420480
复制相似问题