development

LIKE 와일드 카드를 사용하여 열에서 어떻게 대소 문자를 구분하지 않고 검색 할 수 있습니까?

big-blog 2020. 3. 31. 08:21
반응형

LIKE 와일드 카드를 사용하여 열에서 어떻게 대소 문자를 구분하지 않고 검색 할 수 있습니까?


나는 주변을 둘러 보았고 내가 겪은 것을 찾지 못했습니다.

SELECT * FROM trees WHERE trees.`title` LIKE  '%elm%'

이것은 잘 작동하지만 나무의 이름이 Elm 또는 ELM 등인 경우에는 그렇지 않습니다.

이 와일드 카드 검색에서 SQL 대소 문자를 구분하지 않게하려면 어떻게합니까?

MySQL 5와 Apache를 사용하고 있습니다.


SELECT  *
FROM    trees
WHERE   trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%elm%'

실제로 COLLATE UTF8_GENERAL_CI열 정의에 추가 하면 이러한 트릭을 모두 생략 할 수 있습니다. 자동으로 작동합니다.

ALTER TABLE trees 
 MODIFY COLUMN title VARCHAR(…) CHARACTER 
 SET UTF8 COLLATE UTF8_GENERAL_CI. 

또한이 열에서 인덱스를 다시 작성하여 '%'를 선행하지 않고 쿼리에 사용할 수 있습니다.


나는 항상 이것을 사용 하여이 문제를 해결했습니다.

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%elm%'

대 / 소문자 구분은 열 / 테이블 / 데이터베이스 데이터 정렬 설정에서 정의됩니다. 다음과 같은 방법으로 특정 데이터 정렬에서 쿼리를 수행 할 수 있습니다.

SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci

예를 들어.

( utf8_general_ci유용한 데이터 정렬로 바꾸십시오). _ci의미 사례를 구분 .


다음은 간단한 LIKE 쿼리의 예입니다.

SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'

이제 LOWER () func을 사용하여 대소 문자를 구분하지 않습니다.

SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')

간단히 사용하십시오 :

"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE  '%elm%'";

또는 사용

"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE  '%elm%'";

두 기능 모두 동일하게 작동


나는 그런 일을하고 있습니다.

소문자로 값을 가져오고 MySQL은 나머지를 수행합니다.

    $string = $_GET['string'];
    mysqli_query($con,"SELECT *
                       FROM table_name
                       WHERE LOWER(column_name)
                       LIKE LOWER('%$string%')");

그리고 MySQL PDO 대안의 경우 :

        $string = $_GET['string'];
        $q = "SELECT *
              FROM table_name
              WHERE LOWER(column_name)
              LIKE LOWER(?);";
        $query = $dbConnection->prepare($q);
        $query->bindValue(1, "%$string%", PDO::PARAM_STR);
        $query->execute();

이 쿼리는 대소 문자를 구분하지 않는 검색을 수행한다고 생각합니다.

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';

잘 mysql 5.5에서 연산자는 민감하지 않습니다 ... 따라서 값이 elm 또는 ELM, Elm 또는 eLM 또는 기타이고 '% elm %'과 같이 사용하면 일치하는 모든 값이 나열됩니다.

이전 버전의 mysql에 대해서는 말할 수 없습니다.

대 / 소문자를 구분하여 작업하는 것과 같이 Oracle을 사용하는 경우 '% elm %'과 같이 입력하면이 항목에만 적용되며 대문자는 무시됩니다.

이상하지만 이것이 방법입니다 :)


SELECT name 
       FROM gallery 
       WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' 
       GROUP BY name COLLATE utf8_general_ci LIMIT 5 

ALTER어떤 테이블도 필요하지 않습니다 . SELECT와일드 카드를 사용하려는 실제 쿼리 전에 다음 쿼리 를 사용하십시오.

    set names `utf8`;
    SET COLLATION_CONNECTION=utf8_general_ci;
    SET CHARACTER_SET_CLIENT=utf8;
    SET CHARACTER_SET_RESULTS=utf8;

테이블에 적절한 인코딩 및 데이터 정렬을 설정해야합니다.

테이블 인코딩은 실제 데이터 인코딩을 반영해야합니다. 데이터 인코딩은 무엇입니까?

테이블 인코딩을 보려면 쿼리를 실행할 수 있습니다 SHOW CREATE TABLE tablename


대소 문자를 구분하지 않으려면 항상 비교하기 전에 모든 문자열을 소문자로 변환하십시오.


사용하다 ILIKE

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';

그것은 나를 위해 일했다!!

참고 URL : https://stackoverflow.com/questions/2876789/how-can-i-search-case-insensitive-in-a-column-using-like-wildcard

반응형