處理latin1專欄中,我想通過標題做一個這樣的查詢:查詢從Java
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。當標題變量包含像重音符號這樣的特殊字符時,查詢從不會找到結果。
我使用的是MySQL數據庫的連接網址是:
的jdbc:mysql的:// mysite的:3306/MyDatabase的autoReconnect的= TRUE &的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:對不起,我的英語。
注意[的PreparedStatement的參數是基於1](https://開頭的文檔。 oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setString(int,%20java.lang.String))。 –
如果您沒有通過使用'0'作爲參數索引引發異常,我會感到非常驚訝。你是否捕捉並壓制某處的異常? –
這應該工作:http://stackoverflow.com/a/33023792/180100 –