2010-06-14 3 views
19

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

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

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

+3

Какова база данных и какая строка подключения вы используете? –

+0

Я использую MySQL и строка подключения: 'jdbc: mysql: // localhost: 3306/manage' –

+0

Ссылка для тех, кто хочет использовать utf8mb4: http://dev.mysql.com/doc/connector -j/en/connector-j-reference-charsets.html –

ответ

43

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

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

+1 Благодарим вас за полезность :) –

+1

Просто сидение для тех, кто сталкивается с одной и той же проблемой: если вы хотите связать параметры в URL-адресе JDBC в своей «стойкости» .xml', вы должны переписать '&' как '&'. Пример: 'jdbc: mysql: // localhost: 3306/manage? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Для более новых версий драйвера jdbc (> = 5.1.13) не указывайте« characterEncoding ». Посмотрите: http://stackoverflow.com/a/18059663/967062 –

11

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

characterEncoding = UTF-8

0

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

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

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

1

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

Смежные вопросы