Как сравнить текст utf8 в запросе MySQL, используя Java - PullRequest
4 голосов
/ 13 января 2012

У меня проблема при выборе из таблицы, содержащей данные в формате utf-8 в MySQL с использованием Java, в предложении WHERE мне нужно сравнить, если значение столбца равно строке Java, но они не совпадают

"Select age from student where name = '"+stringVariable+"';"

stringVariable иногда может быть на арабском языке, поэтому в этом случае они не совпадают

База данных - utf8mb4, а также соединение между java и базой данных - utf_8, и у меня нет проблем при вставке или выборе данных, но проблема возникает при сравнении

Я попытался преобразовать строку, как это, и она также не соответствует

byte[] b = stringVariable.getBytes("UTF-8");
String str = new String(b,"UTF-8");

Так у кого-нибудь есть решение для этого?!

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 13 января 2012

Используйте параметры. Затем драйвер должен правильно их кодировать в соответствии со свойствами соединения.

PreparedStatement statement = connection.prepareStatement(
    "select age from student where name = ?");      
statement.setString(1, stringVariable);

Кроме того, это также корректно экранирует специальные символы SQL (например, одинарные кавычки).

3 голосов
/ 13 января 2012

Вам не нужно ничего менять. Водитель позаботится обо всем. Попробуйте использовать подготовленный оператор вместо конкатенации строк. Это будет иметь дополнительное преимущество в том, что вы сможете избежать SQL-инъекций и убедиться, что ваш оператор работает, даже если строковая переменная содержит кавычку.

1 голос
/ 15 января 2012

Я решил эту проблему, она была связана не только с запросом к базе данных, но я получил строку из запроса ajax, поэтому мне пришлось сначала декодировать ее из utf8, а затем получить значение параметра, используя

URLDecoder.decode(request.getQueryString(), "UTF-8")

, а затем передать его в запрос, и я использовал подготовленный оператор, который кодирует его в соответствии со свойствами соединения, как вы упомянули

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...