0

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

4

2 回答 2

3

在您的代码中设置 UTF-8。看到这个;

    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?useUnicode=true&characterEncoding=utf8");
于 2012-08-16T03:54:16.760 回答
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();
        }

这当然是一团糟,需要一些清理,但这是一个有效的代码。

谢谢马克 B

于 2012-08-16T11:07:45.660 回答