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

我必须使用此查询来查找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时,为什么会看到破折号?

因为下划线_是%百分比的通配符,只是它只查找一个字符。

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

(从3.3.4.7。MySQL文档中的模式匹配 。)

如果你想使用下划线作为文字,你必须逃避它:

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

我有一个类似的问题,空间和连字符匹配完全匹配的string:

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

上面的查询没有返回MySQL中的任何logging。 我不得不逃离空格和连字符,并使用LIKE而不是与equals(=)完全匹配,如下所示:

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