Почему "" (подчеркивание) соответствует "-" (дефис)?
Я должен искать руководство PDF с помощью этого запроса:
root@localhost:test> select * from a where name like '%taz_manual%.pdf%';
+--------------------+------------------+-------------+
| name | description | size |
+--------------------+------------------+-------------+
| taz-manual-1.1.pdf | Manual v1.0 TA-Z | 31351902 |
| taz-manual-0.2.pdf | Manual v1.0 T1-A | 3578278 |
| taz_manual-2.0.pdf | Manual v2.0 GA-X | 542578278 |
etc........
+--------------------+------------------+-------------+
132 row in set (0.00 sec)
почему я вижу тот, с тире, когда я указываю имя, чтобы быть taz_manual%.pdf
?
2 ответа:
потому что подчеркивание
_
является подстановочным знаком, как процент%
, за исключением того, что он ищет только один символ.сопоставление шаблонов SQL позволяет использовать " _ "для сопоставления любого отдельного символа и" % " для сопоставления произвольного числа символов (включая нулевые символы).
(раздел 3.3.4.7. Сопоставление С Образцом в документации MySQL.)
если вы хотите использовать подчеркивание в
like
как a буквально, Вы должны избежать этого:select * from a where name like '%taz\_manual%.pdf%';
у меня была аналогичная проблема с пробелами и дефисами при сопоставлении строк с точным соответствием:
SELECT id FROM location WHERE name = 'IND - HQ';
приведенный выше запрос не вернул никаких записей в MySQL. Я должен был избежать пробелов и дефисов и использовать
LIKE
вместо точного совпадения с "равно" ( = ) выглядит следующим образом:SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';