mysql查询的where子句中的问题

时间:2011-05-12 13:56:17

标签: mysql syntax

您好 我正在使用文件的SHA1生成messahedigest(扩展名为.eml,因为它包含电子邮件信息),然后将其存储到messagedigest列中名为web_de的表中。为什么我不能在mysql中执行以下查询?而且也不是在java ...

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

虽然我可以像

那样执行查询
SELECT slno FROM `webcrawler`.`web_de` 
where messagedigest= ')@Ä€ó…ªã³§°óÚdv~θ`';

请注意我正在尝试在mysql workbench 5.2.32中执行该查询并使用mysql 5.1

有人可以帮我吗???

提前致谢

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

'未被转义。将其替换为双引号'',使其显示为:

SELECT slno FROM `webcrawler`.`web_de`  
where messagedigest='?Ê''?`®o1F±[øT¤?¿!€'; 
编辑:太慢了! :P

您也可以使用\'

来转义它

答案 2 :(得分:0)

messagedigest值中包含引号。如果你逃避报价它应该工作,但...... 在尝试将消息摘要写入数据库之前,最好先对其进行编码。