在where子句中使用单引号的Mysql查询

时间:2012-08-30 13:29:44

标签: mysql

我有这个问题:

SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\'infinito%'

表中的值包含引号前的斜杠。 为什么查询没有返回结果?

感谢

3 个答案:

答案 0 :(得分:2)

逃避是正确的。您实际上不需要LCASE,因为LIKE不区分大小写(至少不在我的Linux系统上):

mysql> SELECT 'L\'Infinito' LIKE '%l\'infinito%';
+------------------------------------+
| 'L\'Infinito' LIKE '%l\'infinito%' |
+------------------------------------+
|                                  1 |
+------------------------------------+
1 row in set (0.00 sec)

也许你想用' n'搜索 L' Infinito 。或者标题似乎包含单引号,但它是其中一个永远不会被诅咒的Windows Word反向英语引号。

或者在报价后标题中可能有空格。在许多字体中,这不是立即可见的。

L' infinito

您可以使用'%ifinito%'进行搜索(或'%infinito%'),并验证找到的行确实包含单个ASCII引号?

<强>更新

...最后,可能是数据库错误。即:

mysql> CREATE TABLE catalogo (title varchar (32));
mysql> INSERT INTO catalogo VALUES ('L\'Infinito');
mysql> SELECT * FROM catalogo;
+------------+
| title      |
+------------+
| L'Infinito |
+------------+

如果您运行与以前相同的SELECT,MySQL是否会在没有转义的情况下返回 L&#39; Infinito ?因为如果你有

+-------------+
| title       |
+-------------+
| L\'Infinito |
+-------------+

然后标题已保存错误,转义引号TWICE。所以在L和引号之间有一个转义符号,你必须搜索

L\\\'Infinito

to&#34;中和&#34;错误。

答案 1 :(得分:0)

试试这个:

SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\\\'infinito%'

答案 2 :(得分:0)

以下查询将回答您的问题:

string s="'infinito";
s=s.Replace("'", "''");
SELECT * FROM tbname WHERE LCASE(title) LIKE '%s%'