从java查询latin1列

时间:2015-12-22 16:38:23

标签: java mysql jdbc

我想通过这样的标题进行查询:

String title = "transfusión";
String sql = "SELECT id FROM graph WHERE title=?";
PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, title);
st.executeQuery();

问题是标题列charset是 latin1 ,我的java文件编码是 utf8 。当title变量包含特殊字符(如重音符号)时,查询永远不会找到结果。

我正在使用MySQL数据库,连接网址是:

JDBC:MySQL的:// mysite的:3306 / MyDatabase的autoReconnect的=真安培;的characterEncoding = LATIN1&安培; useOldAliasMetadataBehavior =真

我使用 useUnicode = true / false characterEncoding = latin1 / utf8 / auto 尝试了多种替代方案,但我从未得到任何结果。

此外,我尝试在准备语句之前将标题 sql 转换为 ISO-8859-1

title =  new String(title.getBytes("UTF-8"), "ISO-8859-1");
sql =  new String(sql.getBytes("UTF-8"), "ISO-8859-1");

我无法更改数据库的字符集,因为我不是管理员。

我该如何解决?

PD:抱歉我的英文。

2 个答案:

答案 0 :(得分:1)

请参阅表5.3 MySQL到Java编码名称翻译:
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-charsets.html

  

JDBC:MySQL的:// mysite的:3306 / MyDatabase的autoReconnect的=真安培;的的characterEncoding =   CP1252 &安培; useOldAliasMetadataBehavior =真

答案 1 :(得分:1)

谢谢@Harlam。您的解决方案不完全正确,但您帮助我找到了正确的解决方案。我必须将标题变量转换为 Cp1252 而不是 ISO-8859-1 ,它完美地运行:

title = new String(title.getBytes("UTF-8"), "Cp1252");