2010-05-14 70 views
4

我從RSS通道獲取數據,將其清理並保存在數據庫中。我使用java,tidy,MySQL和JDBC。編碼問題wirh JDBC和MySQL

步驟:

  1. 我搶RSS-記錄。沒關係。
  2. 我用整潔來清理html。 這是一個轉變。 Tidy會自動將字符串「So So ’#不太可能」轉換爲「所以不太可能」。
  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; 

JDBC連接URL是

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(); 

作爲RESU我看到數據庫中的破碎字符就像「So it'不太可能「。我也看到了,然後在網頁上輸出文本(utf-8頁面)。

回答

5

不要忘記還有很多其他地方的編碼設置可能不同。你的數據庫/表/列有正確的編碼開頭。另外,我通常把我能夠在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/ | 
+--------------------------+----------------------------+