2011-05-12 85 views
1

嗨 我正在用文件SHA1(擴展名爲.eml,因爲它包含電子郵件信息)生成messahegest,然後將它存儲到messagedigest列中名爲web_de的表中。爲什麼我不能在mysql中執行以下查詢?也沒有在java中...mysql查詢where子句中的問題

SELECT slno FROM `webcrawler`.`web_de` 
where messagedigest='?Ê'?`®o1F±[øT¤?¿!€' ; 

,而我就可以執行查詢像

SELECT slno FROM `webcrawler`.`web_de` 
where messagedigest= ')@Ä€ó…ªã³§°óÚdv~θ`'; 
我試圖以執行MySQL工作臺5.2.32該查詢和使用MySQL 5.1中

PL記

有人可以幫我在這裏嗎???

在此先感謝

回答

3

你要逃離的第一查詢單引號:

where messagedigest = '?Ê''?`®o1F±[øT¤?¿!€' ; 

逃逸是通過複製引號完成:

'' 

(順便說一句:你看,即使是stackoverflow語法熒光筆也無法正確格式化您的字符串...)

另一方面,由於各種原因(安全性,性能),您不應該在SQL中內聯值。由於您使用的Java,使用PreparedStatement代替:

// Prepare a statement with a bind variable : ? 
PreparedStatement ps = connection.prepareStatement(
    "SELECT slno FROM webcrawler.web_de WHERE messagedigest = ?"); 

// Bind your string to the first bind variable 
ps.setString(1, "?Ê'?`®o1F±[øT¤?¿!€"); 

// ... 
ResultSet rs = ps.executeQuery(); 
0

'沒有被轉義。將其替換爲雙引號'',使其顯示爲:

SELECT slno FROM `webcrawler`.`web_de` 
where messagedigest='?Ê''?`®o1F±[øT¤?¿!€'; 

編輯:太慢了! :P

您還可以通過使用\'

0

的消息摘要值中有報價逃脫它。如果你逃避報價它應該工作,但... 你可能會更好的編碼消息摘要,然後再嘗試寫入數據庫。

+0

可以給我一些想法,我該如何做消息摘要的編碼? – user523956 2011-05-18 13:38:49

+0

@ user523956你可以使用UUEencode/UUDecode。如果你是谷歌,那裏有各種各樣的實現。有一個太陽實現曾經是Java的一部分,但它不是官方API規範的一部分,所以它可能會消失。 – 2011-05-18 14:29:15