我有这个查询:
SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\'infinito%'
表中的值包含引号前的斜线。为什么查询没有返回结果?
谢谢
我有这个查询:
SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\'infinito%'
表中的值包含引号前的斜线。为什么查询没有返回结果?
谢谢
转义是正确的。您实际上不需要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
以“中和”错误。
尝试这个:
SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\\\'infinito%'
以下查询将回答您的问题:
string s="'infinito";
s=s.Replace("'", "''");
SELECT * FROM tbname WHERE LCASE(title) LIKE '%s%'