나는 몇 가지를 둘러 보았고 내가 겪은 것을 찾지 못했습니다.
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%';