2010-12-04 7 views

Répondre

5

Le caractère d'échappement par défaut est \. Il suffit donc de préfixe % avec un \ comme: \%:

Le manual dit clairement:

Pour tester la littérale d'un wild-card , faites précéder par le caractère d'échappement . Si vous ne spécifiez pas le caractère ECHAP , "\" est supposé.

Rechercher % dans Stack%Overflow:

mysql> select 'Stack%Overflow' like '%\%%'; 
+------------------------------+ 
| 'Stack%Overflow' like '%\%%' | 
+------------------------------+ 
|       1 | <----- Found 
+------------------------------+ 
1 row in set (0.00 sec) 

Rechercher % dans StackOverflow:

mysql> select 'StackOverflow' like '%\%%'; 
+-----------------------------+ 
| 'StackOverflow' like '%\%%' | 
+-----------------------------+ 
|       0 | <----- Not Found 
+-----------------------------+ 
1 row in set (0.00 sec) 

EDIT:

Si vous appelez cette requête de PHP, vous aurai t o utiliser \\. En effet, même PHP utilise \ comme caractère d'échappement. Donc, faites en sorte que MySQL ait un \ vous devez avoir \\ en PHP.

0

Voici un exemple:

$sql = 'SELECT * FROM tableName WHERE fieldName LIKE "wildcard\%"'; 
0

ok je dois utiliser doble (\\) pour correspondre à la base de données% dans la

+0

pourquoi ça marche pas avant? –

0

Vous devez échapper à la \ dans la chaîne de PHP ainsi, sinon PHP penserait que vous échappez en fait le%, envoyant ainsi% littéral à la requête SQL, donc je pense que cela devrait fonctionner:

mysql_query("select * from bla where bli like '\\%somewords\\%'"); 
+0

Si vous utilisiez des chaînes entre guillemets doubles ('' ''), vous n'auriez à double-échapper que si votre version recherche des antislashs littéraux avec des caractères génériques –

+0

ups sorry, edited –

0

En dernière version, vous pouvez aussi essayer

select * from tbl1 where TxtExpr REGEXP '^%'; 

ce qui a trait

Questions connexes