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)

L'Infinitoを 'n' で検索したいかもしれません。または、タイトルに一重引用符が含まれているように見えるかもしれませんが、これは、Windows Word の英語の逆引用符の 1 つです。

または、引用の後のタイトルにスペースがあるかもしれません. 多くのフォントでは、これはすぐにはわかりません。

L' infinito

「%ifinit%」(または「%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 |
+-------------+

次に、タイトルが間違って保存され、引用符が 2 回エスケープされました。したがって、L と引用符の間にエスケープ記号があり、検索する必要があります。

L\\\'Infinito

エラーを「中和」します。

于 2012-08-30T13:37:05.233 に答える
0

次のクエリはあなたの質問に答えます:

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

これを試して:

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