Почему "" (подчеркивание) соответствует "-" (дефис)?


Я должен искать руководство 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 98

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';