Кодировка символов JDBC - PullRequest
22 голосов
/ 15 июня 2010

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

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

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

Ответы [ 4 ]

50 голосов
/ 15 июня 2010

Кодировка определяется JDBC, а не JPA:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
12 голосов
/ 15 июня 2010

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

characterEncoding = UTF-8

3 голосов
/ 18 марта 2016

Новая версия драйвера JDBC автоматически определяет кодировку символов. Вам не нужно устанавливать это явно.

0 голосов
/ 29 декабря 2015

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

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

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

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