1

我有这个查询:

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

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

谢谢

4

3 回答 3

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'Infinito而不转义?因为如果你有

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

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

L\\\'Infinito

以“中和”错误。

于 2012-08-30T13:37:05.233 回答
0

尝试这个:

SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\\\'infinito%'
于 2012-08-30T13:31:55.183 回答
0

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

string s="'infinito";
s=s.Replace("'", "''");
SELECT * FROM tbname WHERE LCASE(title) LIKE '%s%'
于 2016-07-08T15:33:04.670 回答