0

MySQL データベースに短いメッセージを挿入する小さな Java メソッドがあります。テーブルのデフォルトの照合順序は 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

何がうまくいかなかったのかを見つけるのを手伝ってくれて、マーク B に感謝します。これは、同様の問題に遭遇する可能性のある将来の開発者のための要約にすぎません。

したがって、マークのコメント (上記の私の質問) から、リンクを確認する必要があることがわかりました。その方法はわかりませんでしたが、簡単なGoogle検索を行ったところ、次のページにたどり着きました: 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 に答える