2013-10-28 53 views
6

數據庫中的希臘字符就像問號(「?????」)。我找不到解決方案。我開發了一個使用Java/Swing的應用程序,但是當我在MySQL中插入希臘字母就像問號一樣。我將db整理更改爲utf8和列。我的項目編碼設置爲UTF-8。當我從MySQL插入希臘字母時,它們被正確存儲。Unicode(希臘語)字符存儲在數據庫中,如「??????」

我正在使用MySQL連接器jar文件。

public class Testing { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    try { 
     Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/chartest","root","1234"); 
     Statement pst=conn.createStatement(); 
     String var1="ασδασδ"; 
     String sql="INSERT INTO chars(value) values('"+var1+"')"; 
     pst.execute(sql); 
    } catch (SQLException ex) { 
     Logger.getLogger(Testing.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

}

+0

請註明您如何連接到你的MySQL服務器(你可能需要設置客戶端編碼正確) – mabi

+0

你設置客戶端編碼當前連接? – Nicolai

+1

試試這個http://stackoverflow.com/a/6398128/1597671 –

回答

4

我想你只需要在創建連接添加一對更多的參數(useUnicodecharacterEncoding)。下面的代碼對我的作品:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.PreparedStatement; 

public class GreekTestMain { 

    public static void main(String[] args) { 
     String connUrl = 
       "jdbc:mysql://192.168.1.3/greektest?" + 
       "useUnicode=yes&characterEncoding=UTF-8" + 
       "&user=root&password=obfuscated"; 
     try (Connection conn = DriverManager.getConnection(connUrl)) { 
      String sql = "INSERT INTO `chars` (`value`) VALUES (?)"; 
      PreparedStatement pst = conn.prepareStatement(sql); 
      pst.setString(1, "ασδασδ"); 
      pst.executeUpdate(); 
     } catch (Exception e) { 
      e.printStackTrace(System.err); 
     } 
    } 

} 
+0

謝謝你這麼多Mate.Actually我是一個初學者在編程,我想在java中建立一個車庫應用程序來存儲我的客戶,我無法存儲他們在希臘語,只有英文由於目前issue.I不能投票,因爲我需要15 +聲譽。再次感謝你:) – user2109456

+0

不適合我:( –

+0

這個答案可以幫助我解決問題,堅持希臘字符到數據庫中,我可以確認它可以是一個很好的解決方案。感謝您的幫助! – Tung