我想通过这样的标题进行查询:
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:抱歉我的英文。
答案 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");