2015-12-22 20 views
2

處理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/falsecharacterEncoding = 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:對不起,我的英語。

+3

注意[的PreparedStatement的參數是基於1](https://開頭的文檔。 oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setString(int,%20java.lang.String))。 –

+0

如果您沒有通過使用'0'作爲參數索引引發異常,我會感到非常驚訝。你是否捕捉並壓制某處的異常? –

+0

這應該工作:http://stackoverflow.com/a/33023792/180100 –

回答

0

謝謝@哈勒姆。您的解決方案不完全正確,但您已幫助我找到正確的解決方案。我有標題變量轉換爲的Cp1252ISO-8859-1和它完美的作品:

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