Нет никакой разницы между %%
и %
, когда дело доходит до сопоставления с образцом в 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)