为什么“ _”(下划线)匹配“-”(连字符) ?

我必须使用这个查询来查找 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

50790 次浏览

Because the underscore _ is a wildcard like the percent %, except that it only looks for one character.

SQL 模式匹配允许您使用“ _”匹配任何单个字符,使用“%”匹配任意数量的字符(包括零个字符)。

(摘自 MySQL 文档中的 3.3.4.7模式匹配部分。)

如果你想在 like中使用下划线作为文字,你必须转义它:

select * from a where name like '%taz\_manual%.pdf%';

我在匹配完全匹配的字符串时遇到了类似的空格和连字符问题:

SELECT id FROM location WHERE name = 'IND - HQ';

上面的查询在 MySQL 中没有返回任何记录。我必须转义空格和连字符,使用 LIKE代替与 equals (=)的精确匹配,如下所示:

SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';