我想通过这样的标题进行查询:
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数据库,连接URL是:
JDBC:MySQL的:// mysite的:3306 / MyDatabase的autoReconnect的=真安培;的characterEncoding = LATIN1&安培; useOldAliasMetadataBehavior =真
我尝试使用useUnicode = true / false或characterEncoding = latin1 / utf8 / auto多个替代品,但我从来没有得到任何结果.
另外我尝试在准备语句之前将title和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:抱歉我的英文.
最佳答案 请参阅表5.3 MySQL到Java编码名称转换:
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-charsets.html
jdbc:mysql://mysite:3306/mydatabase?autoReconnect=true&characterEncoding=
Cp1252&useOldAliasMetadataBehavior=true