2013-03-24 2 views
1

하위 문자열을 포함하는 문자열을 찾기 위해 쿼리를 작성하려고합니다. 다음 두 가지 방법의 차이점은 무엇입니까?LIKE를 사용하여 substring에 대한 sql 검색()

  1. SELECT * FROM table WHERE names LIKE '%bob%'

  • SELECT * FROM table WHERE locate('bob', names)
  • 내가 먼저 LIKE를 사용하는 배웠습니다,하지만 난 가졌다 "데이터 정렬의 불법 믹스 ..."오류가 내가 영어 (라틴어)와 중국어 (비교 해요 말하는 big5). 데이터 정렬 문제를 해결하는 방법을 검색하는 동안 locate()를 보았습니다.이 시도는 데이터 정렬을 시도 할 때 데이터 정렬에 대해 불평하지 않았습니다. 내가 locate()를 계속 사용할 수 있는지 또는 거기에 단점이 있는지 궁금하다.

    답변

    0

    상당 부분 맛의 문제입니다.

    like은 ANSI 표준 SQL로 대부분의 데이터베이스에서 지원됩니다. locate은 MySQL에만 해당되므로 다른 데이터베이스에 반드시 이식 할 필요는 없습니다.

    일부 데이터베이스는 인덱스를 사용하기 위해 식 x like 'y%'을 최적화합니다. MySQL은 그렇지 않습니다. 따라서 이것은 당신을위한 고려 사항이 아닙니다.

    like의 또 다른 장점은 초기 일치 ('y%') 및 최종 일치 ('%y')와 중간 일치를 지원한다는 것입니다. 세 가지 방법 중 하나. locate을 사용하는 동등한 명령문은 더 복잡합니다.

    특히 휴대 성 때문에 like을 선호합니다. 그러나 나는 전형적으로 다른 캐릭터 세트를 다루지 않는다. MySQL에서는 learning about collations을 사용하는 것이 좋을 수도 있습니다.