MySQL работает на Latin1 - как вставить данные в кодировке UTF-8? - PullRequest
3 голосов
/ 17 марта 2012

У меня есть веб-приложение в jsf2.0 на Tomcat 6 и MySQL. Я использую специальные символы, например, «ąśżźć». Я могу читать данные из MySQL и правильно показывать их на веб-странице. Проблема возникает, когда пользователь заполняет форму любым специальным символом, после чего в MySQL символы заменяются на «?». Но если я использую инструмент MySQL Workbench и сделаю вставку в БД, все будет работать, и специальные символы будут отображаться правильно на веб-странице.

Моя конфигурация:

JSF - UTF-8 (for response and request character encoding)
MySQL columns are configured to use UTF-8, example: DESCRIPTION varchar(100)  CHARACTER SET utf8 null
character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8

И character_set_server = latin1 доставляет мне большие проблемы. Когда это UTF-8, все в порядке, в latin1 нет.

Моя хостинговая компания не изменит настройки MySQL, поэтому latin1 остается: - (.

Как я могу обойти это?

Я уже пробовал много решений, таких как создание фильтра, преобразование с использованием Charset и String.getBytes (). У меня заканчиваются идеи.

Для подключения я использую JDBC от org.apache.tomcat.jdbc.pool.DataSource.

1 Ответ

8 голосов
/ 17 марта 2012

Драйвер MySQL JDBC по умолчанию использует кодировку символов платформы по умолчанию, полученную с помощью Charset#getDefaultCharset(), которая не обязательно является UTF-8.Вам необходимо установить его в качестве параметра в URL JDBC:

jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8

См. Также:

...