我有这个问题:
SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\'infinito%'
表中的值包含引号前的斜杠。 为什么查询没有返回结果?
感谢
答案 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%'