'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%%"
答案 0 :(得分:8)
在mysql中进行模式匹配时,%%
和%
之间没有区别。
我看到开发人员在尝试匹配文字%
并因此写%%
时对此感到困惑。这通常是因为format-strings经常使用双%
表示您希望将其视为精确的文字。
LIKE
如果将字符串传递给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%'";
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)