Написание иврита в mySql с использованием JAVA

У меня есть небольшой метод 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-скрипт, который иногда записывает в другую аналогичную таблицу в этой базе данных, и он отлично работает.


person Tom Klino    schedule 15.08.2012    source источник
comment
Убедитесь, что ваши таблицы настроены на прием иврита (utf-8, вероятно, самый безопасный/самый простой выбор), затем убедитесь, что весь ваш конвейер также настроен на utf-8: сценарии, системы ввода, ссылка на базу данных (даже если таблица в utf, ссылки может и не быть).   -  person Marc B    schedule 15.08.2012
comment
@MarcB, что вы имеете в виду под ссылкой? это разъем jdbc? система ввода есть. Я знаю это, потому что он также отправляет строку другим методам, которые получают ее нормально. и единственный скрипт, который есть, это тот, который я вставил выше? можно поподробнее о ссылке? Я не уверен, что понимаю. Спасибо   -  person Tom Klino    schedule 16.08.2012


Ответы (2)


Установите UTF-8 в свой код. Посмотри это;

    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/embeddedChat?useUnicode=true&characterEncoding=utf8");
person Sai Ye Yan Naing Aye    schedule 16.08.2012

Спасибо, Марк Б., за то, что помог мне выяснить, что пошло не так. Это будет просто краткое изложение для любого будущего разработчика, который может столкнуться с подобной проблемой.

Итак, из комментария Марка (выше по моему вопросу) я понял, что мне нужно проверить ссылку. Я не знал, как это сделать, но провел краткий поиск в 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();
        }

Конечно, это беспорядок, и его нужно немного почистить, но это рабочий код.

Спасибо, Марк Б.

person Tom Klino    schedule 16.08.2012