使用JAVA将希伯来语写入mySql

使用JAVA将希伯来语写入mySql,java,mysql,hebrew,Java,Mysql,Hebrew,我有一个小型Java方法,可以将短消息插入MySQL数据库。 该表的默认排序规则为utf8\U unicode\U ci,java代码为: private void insertMessageToDataBase(String lRoom, String lChatusername, String lMessage) { try { Connection con = DriverManager.getConnection("jdbc

我有一个小型Java方法,可以将短消息插入MySQL数据库。 该表的默认排序规则为utf8\U unicode\U 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脚本,有时会写入数据库中的另一个类似表,并且工作正常。

在代码中设置UTF-8。看这个,

    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?useUnicode=true&characterEncoding=utf8");

在代码中设置UTF-8。看这个,

    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?useUnicode=true&characterEncoding=utf8");

谢谢Marc B帮我找出问题所在。对于任何可能遇到类似问题的未来开发人员来说,这只是一个总结

因此,从Marc的评论(上面关于我的问题)我明白我需要检查链接。我不知道怎么做,但我做了一个简短的谷歌搜索,发现了这个页面:

实际上,我所需要做的就是在连接字符串中添加以下行:&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

谢谢Marc B帮我找出问题所在。对于任何可能遇到类似问题的未来开发人员来说,这只是一个总结

因此,从Marc的评论(上面关于我的问题)我明白我需要检查链接。我不知道怎么做,但我做了一个简短的谷歌搜索,发现了这个页面:

实际上,我所需要做的就是在连接字符串中添加以下行:&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

确保您的表格设置为接受希伯来语(utf-8可能是最安全/最简单的选择),然后确保您的整个管道也设置为utf-8:脚本、输入系统、数据库链接(即使表格是utf,链接也可能不是)。@MarcB链接是什么意思?这是jdbc连接器吗?输入系统是。我知道这一点,因为它还将字符串转发给其他接收它的方法。唯一的脚本就是我上面贴的那个?你能更具体地描述一下链接部分吗?我不太明白。感谢确保您的表设置为接受希伯来语(utf-8可能是最安全/最简单的选择),然后确保您的整个管道也设置为utf-8:脚本、输入系统、数据库链接(即使表是utf,链接也可能不是)。@MarcB链接是什么意思?这是jdbc连接器吗?输入系统是。我知道这一点,因为它还将字符串转发给其他接收它的方法。唯一的脚本就是我上面贴的那个?你能更具体地描述一下链接部分吗?我不太明白。谢谢