Проблема с диакритическим знаком, получение данных из базы данных Java - PullRequest
1 голос
/ 12 марта 2019

У меня есть база данных MySQL, где я сохранил данные, а некоторые слова содержат диакритические знаки.

Это моя функция, как получить данные из базы данных.

public List<RowType> getData(String query){

    List<RowType> list = new ArrayList<>();
    try{
        connect();
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(query);

        while(resultSet.next()){
            StringBuilder str = new StringBuilder();
            for(int i = 1; i <= getCountColumns(resultSet); i++){
                if(i==1) str.append(resultSet.getString(i));
                else str.append("," + resultSet.getString(i));
            }
            list.add(new RowType(str.toString()));
        }
    }
    catch(Exception e){
        System.out.println("Chyba při získavání údajů z databáze.");
        System.out.println(e);
        Console.print("Chyba při získavání údajů z databáze.");
        Console.print(e.toString());
    }
    finally{
        disconnect();
    }
    return list;
}

В качестве параметра я отправляю этот запрос.

List<RowType> list = connection.getData("Select id from countries where name = 'Česko'");

Но он ничего не находит, потому что у меня есть диакритический знак в запросе ("Česko"). Я пробую это без диакритики, и это работает. Так вы не знаете, как исправить это, чтобы работать с акцентами тоже?

1 Ответ

0 голосов
/ 12 марта 2019

Можете ли вы попробовать добавить еще несколько запросов перед выполнением основного запроса? так это будет выглядеть примерно так:

connect();
Statement statement = connection.createStatement();

String query2 = "SET NAMES 'utf8'";
statement.execute(query2);

query2 = "SET CHARACTER SET 'utf8'";
statement.execute(query2);

ResultSet resultSet = statement.executeQuery(query);

если вышеописанное не работает для вас, возможно, есть проблема с настройками вашей базы данных; если это так, вы можете обратиться к ответу здесь

...