[mysql] “_”(밑줄)이 “-“(하이픈)과 일치하는 이유는 무엇입니까?

이 쿼리를 사용하여 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입니까?



답변

밑줄 _%하나의 문자 만 찾는 것을 제외하고 는 percent와 같은 와일드 카드 이기 때문입니다.

SQL 패턴 일치를 사용하면 “_”를 사용하여 단일 문자를 일치시키고 “%”를 사용하여 임의의 문자 수 (0 개 문자 포함)를 일치시킬 수 있습니다.

(섹션 3.3.4.7. MySQL 문서의 패턴 매칭 .)

밑줄을 like리터럴로 사용하려면 이스케이프해야합니다.

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


답변