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

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

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

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

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

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

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

characterEncoding = UTF-8

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

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

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

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

  • Установка кодировки символов Java по умолчанию?
  • Давайте будем гением компьютера.