У меня есть сценарий с двумя базами данных MySQL (в UTF-8), кодом Java (служба таймера), который синхронизирует обе базы данных (чтение формы сначала из них и запись / обновление до второй) и веб-приложение, которое позволяет изменять данные загружены во вторую базу данных.
Весь доступ к базе данных осуществляется с использованием IBATIS (но я обнаружил, что у меня та же проблема с использованием JDBC, PreparedStatement
s и ResultSet
s)
Когда мой java-код читает данные из первой базы данных, я получаю символы типа 'ó'
, когда на самом деле это должно быть 'ó'
. Эти данные записаны без изменений для второй базы данных.
Позже, когда я вижу загруженные данные в своем веб-приложении, я вижу символ extrange, несмотря на <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
.
Если я декодирую данные, используя ...
new String(data.getBytes("UTF-8"));
... Я правильно представляю персонажа (ó). Но я не могу использовать это решение как общее правило, потому что, когда я изменяю данные с помощью формы веб-приложения, данные не обновляются в UTF-8 в моей второй базе данных (несмотря на то, что база данных - UTF-8, и моя строка подключения использует characterEncoding, characterSetResults и useUnicode параметры).
Из моего кода Java я получаю следующие настройки базы данных:
character_set_client-->utf8
character_set_connection-->utf8
character_set_database-->utf8
character_set_filesystem-->binary
character_set_results-->utf8
character_set_server-->latin1
character_set_system-->utf8
character_sets_dir-->/usr/local/mysql51/share/mysql/charsets/
Невозможно изменить настройку character_set_server, и я не знаю, что я делаю неправильно !!
Как я могу прочитать данные UTF-8 из MySQL, используя JDBC-коннектор (mysql-connector-java-5.1.5-bin.jar
)?
Проблема в чтении данных из первой базы данных или записи во вторую базу данных?