我有一个小的Java方法,可以将短消息插入MySQL数据库。 表的默认排序规则是utf8_unicode_ci,java代码是:
private void insertMessageToDataBase(String lRoom, String lChatusername,
String lMessage) {
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?" +
"user=site_access&password=XXXXXXX");
addMessageToDataBase = con.prepareStatement("INSERT INTO `" + lRoom + "` (username, message, action)" +
" VALUES (?,?,'message');");
addMessageToDataBase.setString(1, lChatusername);
addMessageToDataBase.setString(2, lMessage);
addMessageToDataBase.executeUpdate();
}
catch (SQLException e) {
e.printStackTrace();
}
}
问题是,当lMessage是希伯来语时,结果是一串' ??????'
顺便说一句: 我不知道它是否有帮助,但是还有一个PHP脚本有时会写入此数据库中的另一个类似的表,它可以正常工作。
答案 0 :(得分:3)
在代码中设置UTF-8。看到这个;
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?useUnicode=true&characterEncoding=utf8");
答案 1 :(得分:1)
谢谢Marc B帮我找出问题所在。对于任何可能遇到类似问题的未来开发人员来说,这只是一个总结。
所以,从Marc的评论(上面我的问题)我明白我需要检查链接。我不知道该怎么做,但我做了一个简短的谷歌搜索并找到了这个页面:http://www.jvmhost.com/articles/tomcat-java-mysql-jdbc-and-unicode
实际上我需要做的就是在连接字符串中添加以下行:& useUnicode = true& characterEncoding = UTF-8
这就是我的工作代码现在的样子:
private void insertMessageToDataBase(String lRoom, String lChatusername,
String lMessage) {
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?" +
"user=site_access&password=XXXXXXXX&useUnicode=true&characterEncoding=UTF-8");
addMessageToDataBase = con.prepareStatement("INSERT INTO `" + lRoom + "` (username, message, action)" +
" VALUES (?,?,'message');");
addMessageToDataBase.setString(1, lChatusername);
addMessageToDataBase.setString(2, lMessage);
addMessageToDataBase.executeUpdate();
}
catch (SQLException e) {
e.printStackTrace();
}
这当然是一团糟,需要一些清理,但这是一个 工作 代码。
谢谢Marc B