mysql подстановочные знаки% против %% - PullRequest
4 голосов
/ 23 декабря 2011

Какая разница в '%' и '%%', когда используется в предложении 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 Ответ

8 голосов
/ 23 декабря 2011

Нет никакой разницы между %% и %, когда дело доходит до сопоставления с образцом в mysql.

Я видел, как разработчики путаются из-за этого, когда они пытаются сопоставить литерал % идля этого напишите %%.Чаще всего это происходит из-за того, что строки формата часто используют двойной %, чтобы указать, что вы хотите, чтобы его считали точным литералом.


Документация MySQL по 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%'";

Несколько примеров SELECT с использованием оператора LIKE

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)
...