您好 我正在使用文件的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
有人可以帮我吗???
提前致谢
答案 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值中包含引号。如果你逃避报价它应该工作,但...... 在尝试将消息摘要写入数据库之前,最好先对其进行编码。