2015-09-08 3 views
0

Я создал приложение в Java EE, которое использует Hibernate для связи с MySQL. Он отлично работает на моей машине разработки Windows, но у меня проблема на debian, где приложение развернуто.Hibernate, MySQL Кодирование не работает на debian

Когда я ищу ключевое слово с польскими буквами (например, ł, ą, ć, ó и т. Д.), Результат получается нормально в Windows, но на сервере, где я импортировал базу данных, он не работает.

Hibernate запрос выглядит следующим образом:

@NamedQuery(name = "Keyword.findByKeyword", query = "SELECT k FROM Keyword k WHERE k.keyword = :keyword") 

и называется так:

myEntityManager.createNamedQuery("Keyword.findByKeyword").setParameter("keyword", keyword).getSingleResult(); 

Когда я использую MySQL на Debian с помощью SSH и введите в запросе на выборку вручную:

SELECT * FROM keywords WHERE keyword = 'ser żółty'; 

он также работает и возвращает один результат. Кодирование и сортировка таблиц и столбцов также в порядке. В конфигурации источника данных я добавил

?UseUnicode=true&characterEncoding=utf8 

параметров, но это также не помогло. Я подумал, что, может быть, есть проблема с кодировкой в ​​данных от отправки запроса по форме, но проблема возникает, даже если параметр i.e. "ser żółty" жестко закодирован в моем классе репозитория.

Я также использую Hibernate Search для индексирования, и FullTextEntityManager возвращает правильные результаты с польскими буквами.

Я предполагаю, что между Hibernate и MySQL существует некоторая проблема, но у меня нет больше идей, что я могу изменить. Какие-либо предложения?

Сервер Wildfly9.0.1, MySQL 5.6

+0

'SELECT hex (col)' из таблицы для 'ser żółty'. Если он правильно сохранен, вы получите '73657220C5BCC3B3C5827479'. Это должно дать нам понять, к какому направлению обратиться дальше. –

+0

Спасибо за ваш ответ. Я сделал SELECT hex (ключевое слово) FROM keyword WHERE keyword = 'ser żółty'; и я получил ровно 73657220C5BCC3B3C5827479. Любые подсказки? – swch

ответ

0

Ok проблема была в кодировании на уровне MySQL сервера. По умолчанию он был установлен на latin1. Чтобы исправить это, следуйте этому вопросу Change MySQL default character set to UTF-8 in my.cnf? и отредактируйте файл my.cnf.

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