mysql通配符%vs %%

时间:2011-12-23 13:48:54

标签: mysql wildcard where-clause

'mys'和'%''在mysql where子句中使用'LIKE'时有什么区别?

select * from `wp_users` u where u.user_nicename like "%lastuser%"

VS

select * from `wp_users` u where u.user_nicename like "%%lastuser%%"

1 个答案:

答案 0 :(得分:8)

在mysql中进行模式匹配时,%%%之间没有区别。

我看到开发人员在尝试匹配文字%并因此写%%时对此感到困惑。这通常是因为format-strings经常使用双%表示您希望将其视为精确的文字。


LIKE

的MySQL文档

字符串的起源是什么,它在哪里?

如果将字符串传递给sprintf之类的函数,则会出现我之前提到的格式字符串规则,尽管在这种情况下没有混淆。

开发人员希望它在传递给mysql的字符串中是单个%,因此写了%%

$query = sprintf (
  "SELECT ... FROM ... WHERE id <> %d AND data LIKE '%%hello world%%'",
  50
);

// $query => "SELECT ... FROM ... WHERE id <> 50 AND data LIKE '%hello world%'";

使用LIKE运算符

的几个SELECT示例
mysql> SELECT 'abc' LIKE 'ab%';
+------------------+
| 'abc' LIKE 'ab%' |
+------------------+
|                1 |
+------------------+
1 row in set (0.01 sec)

mysql> SELECT 'abc' LIKE 'ab%%';
+-------------------+
| 'abc' LIKE 'ab%%' |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT 'abc' LIKE 'ab\%';
+-------------------+
| 'abc' LIKE 'ab\%' |
+-------------------+
|                 0 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT 'ab%' LIKE 'ab\%';
+-------------------+
| 'ab%' LIKE 'ab\%' |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.00 sec)