Проблема кодирования с JDBC и MySQL - PullRequest
4 голосов
/ 14 мая 2010

Я собираю данные с RSS-каналов, очищаю их и сохраняю в базу данных. Я использую Java, Tidy, MySQL и JDBC.

Шаги:

  1. Я беру RSS-записи. Все в порядке.
  2. Я очищаю HTML с помощью приборки. Вот одна трансформация. Tidy автоматически преобразует строки типа «Так маловероятно» в «Так маловероятно».
  3. Я сохраняю эту строку в таблице

MySQL схема

CREATE TABLE IF NOT EXISTS `rss_item_safe_texts` (
  `id` int(10) unsigned NOT NULL,
  `title` varchar(1000) NOT NULL,
  `link` varchar(255) NOT NULL,
  `description` mediumtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

URL-адрес соединения JDBC:

connUrl = "jdbc:mysql://" + host + "/" + database + "?user=" + username + "&password=" + password + "&useUnicode=true&characterEncoding=UTF-8";

Java-код

PreparedStatement updateSafeTextSt = conn.prepareStatement("UPDATE `rss_item_safe_texts` SET `title` = ?, `link` = ?, `description` = ? WHERE `id` = ?");
updateSafeTextSt.setString(1, EscapingUtils.escapeXssInjection(title));
updateSafeTextSt.setString(2, link);
updateSafeTextSt.setString(3, EscapingUtils.escapeXssInjection(description));
updateSafeTextSt.setInt(4, itemId);
updateSafeTextSt.execute();
updateSafeTextSt.close();

В результате я вижу в базе данных неработающие символы, такие как «Так что ? вряд ли» То же самое я вижу тогда, когда выводит текст на веб-странице (utf-8 page).

1 Ответ

5 голосов
/ 14 мая 2010

Не забывайте, что есть много других мест, где кодировка может быть установлена ​​по-другому. Например, проверьте, правильно ли для вашей базы данных / таблицы / столбца указаны правильные кодировки. Кроме того, я обычно устанавливаю все, что могу, в utf8 в MySQL:

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
...