проблема с utf8 в Java - PullRequest
       19

проблема с utf8 в Java

6 голосов
/ 17 апреля 2011

У меня есть следующая таблица:

create table test
(
  fname char(20) character set utf8 collate utf8_turkish_ci,
  id int primary key
);

Я вставляю данные следующим образом:

resultSet.executeQuery("set namee utf8");
preparedStatement = connection.prepareStatement("insert into test(fname) values(?)");
preparedStatement.setstring(1,"alis");
preparedStatement.executeUpdate();

Но когда я получаю данные, они напоминают ?????.

В чем проблема и как я могу ее решить?

1 Ответ

19 голосов
/ 17 апреля 2011

Согласно документации для драйвера JDBC MySQL вам необходимо также установить кодировку символов в URL-адресе соединения с JDBC. Вот пример:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

В противном случае драйвер MySQL JDBC будет использовать кодировку платформы по умолчанию для преобразования символов в байты перед отправкой по сети, что, по-видимому, в вашем случае не является UTF-8. Все непокрытые символы будут заменены знаками вопроса.

Кроме того, при получении данных необходимо убедиться, что консоль / файл, в котором вы отображаете / записываете символы, также поддерживает / использует UTF-8. В противном случае они также станут вопросительными знаками. Как это исправить, зависит от того, как / где вы отображаете / записываете эти символы.

Смотри также:


Кстати, здесь вам не нужен запрос SET NAMES.

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