使用JAVA将希伯来语写入mySql

时间:2012-08-15 19:41:39

标签: java mysql hebrew

我有一个小的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脚本有时会写入此数据库中的另一个类似的表,它可以正常工作。

2 个答案:

答案 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