LIKE 와일드카드를 사용하여 열에서 검색(대문자와 소문자를 구분하지 않음)하려면 어떻게 해야 합니까?
몇 군데를 둘러보았지만 내가 찾고 있는 것을 찾지 못했기 때문에 여기 있다.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
이것은 정상적으로 동작합니다만, 트리의 이름이 Elm이나 ELM 등이라면...
이 와일드카드 검색에서 SQL 대소문자를 구분하지 않도록 하려면 어떻게 해야 합니까?
MySQL 5와 Apache를 사용하고 있습니다.
이 문제는 항상 낮은 값을 사용하여 해결했습니다.
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%elm%'
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 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();
사용하다ILIKE
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
효과가 있었어!!
비바이너리 문자열 비교(포함)LIKE
)는 MySql에서는 기본적으로 대소문자를 구분하지 않습니다.https://dev.mysql.com/doc/refman/en/case-sensitivity.html
이 쿼리는 대소문자를 구분하지 않는 검색을 수행합니다.
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
그럴 필요 없어요ALTER
임의의 테이블실제보다 먼저 다음 쿼리를 사용하십시오.SELECT
와일드카드를 사용할 쿼리:
set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
mysql 5.5에서는 연산자가 무감각합니다.따라서 vale가 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
나는 항상 이렇게 해결했다.
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE LOWER('%elm%');
테이블에 적절한 인코딩과 조회를 설정해야 합니다.
테이블 인코딩은 실제 데이터 인코딩을 반영해야 합니다.어떤 데이터 인코딩을 사용하고 있습니까?
테이블 인코딩을 표시하려면 쿼리를 실행합니다.SHOW CREATE TABLE tablename
비감각적인 케이스 검색을 전개하고 싶을 때는 비교하기 전에 반드시 모든 문자열을 소문자로 변환합니다.
raja,등의 하려면 를, ra ra, ra ra ra 、 Raja not Raja, Royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal royal for for for for for for를 추가합니다.BINARY
Where where where 의 where where where where where where where where where where where where where 。
SELECT name FROM person_tbl
WHERE BINARY name LIKE "R%";
언급URL : https://stackoverflow.com/questions/2876789/how-can-i-search-case-insensitive-in-a-column-using-like-wildcard
'source' 카테고리의 다른 글
Python의 추상 클래스와 인터페이스의 차이 (0) | 2022.11.05 |
---|---|
리액트 라우터 v4/v5를 사용한 네스트 루트 (0) | 2022.11.05 |
Chrome-devtools에서 실제로 모든 JS 소스를 검색할 수 있습니까? (0) | 2022.11.05 |
stdClass 유형의 개체를 어레이로 사용할 수 없습니까? (0) | 2022.11.05 |
$_COOK 접근setcookie() 직후 IE (0) | 2022.11.05 |