Подтвердить что ты не робот

Кодировка символов JDBC

У меня есть веб-приложение Java, работающее на GlassFish 3 и JPA (EclipseLink) в MySQL. Проблема, с которой я сталкиваюсь, заключается в том, что если я сохраняю объекты в базе данных с помощью метода update(), поля String теряют целостность; '?' отображается вместо некоторых символов.

Сервер, страницы и база данных настроены на использование UTF-8.

После того, как я опубликую данные формы, на следующей странице отображаются данные правильно. Кроме того, в отладке NetBeans "кажется" кажется, что свойство String текущего объекта также сохраняет правильное значение. Dunno, если отладка NetBeans можно доверять; может быть, что он правильно декодирует, однако он неверен.

4b9b3361

Ответ 1

Это JDBC, а не JPA, который определяет кодировку:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8

Ответ 2

Я решил это со следующим: я использовал интерфейс администратора GlassFish, чтобы добавить это свойство в настройки пула соединений:

characterEncoding = UTF-8

Ответ 3

Новая версия JDBC-драйвера автоматически обнаруживает символEncoding. Вам не нужно явно указывать его.

Ответ 4

Мне также пришлось добавить useUnicode = true, поэтому мне пришлось согласовать параметры с помощью & поэтому он выглядит так:

jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&characterEncoding=UTF-8

Если вы используете профили maven для установки URL-адреса MySQL, как и я, убедитесь, что вместо & вместо & вы помещаете &, потому что maven unescape url при записи файла persistence.xml в папку классов.