Jak mogę wyszukiwać (bez rozróżniania wielkości liter) w kolumnie używając jak wildcard?

Rozejrzałem się i nie znalazłem tego, czego szukałem, więc proszę bardzo.

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

To działa dobrze, ale nie jeśli drzewo nazywa się Elm lub ELM itp...

Jak sprawić, by wielkość liter SQL była niewrażliwa na to wyszukiwanie?

Używam MySQL 5 i Apache.

Author: Genhis, 2010-05-20

12 answers

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

Właściwie, jeśli dodasz COLLATE UTF8_GENERAL_CI do definicji kolumny, możesz po prostu pominąć wszystkie te sztuczki: będzie działać automatycznie.

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

Spowoduje to również przebudowanie indeksów w tej kolumnie, aby mogły być używane do zapytań bez wiodącego " % "

 209
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 07:24:44

Zawsze rozwiązywałem to używając lower:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%elm%'
 186
Author: cwallenpoole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 18:41:22

Wielkość liter jest zdefiniowana w Ustawieniach zestawiania kolumn / tabel / baz danych. Możesz wykonać zapytanie pod określonym zestawieniem w następujący sposób:

SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci
Na przykład.

(Zastąp utf8_general_ci dowolnym zestawieniem, które uznasz za przydatne). _ci oznacza niewrażliwe na wielkość liter .

 43
Author: aioobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-30 06:44:01

Oto przykład prostego zapytania typu:

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

Teraz, wielkość liter jest niewrażliwa na LOWER () func:

SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
 34
Author: Federico Piragua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-19 20:50:25

Robię coś takiego.

Pobieranie wartości małymi literami i MySQL robi resztę

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

I dla MySQL PDO alternatywa:

        $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();
 14
Author: Doğa Özkaracaabatlıoğlu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 09:02:14

Myślę, że to zapytanie wykona wyszukiwanie bez rozróżniania wielkości liter:

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
 8
Author: cgupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-13 15:05:39

Po prostu użyj:

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

Lub Użyć

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

obie funkcje działają tak samo

 8
Author: Vi8L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-09 11:50:10

Nie musisz ALTER żadnej tabeli. Po prostu użyj następujących zapytań, przed rzeczywistym zapytaniem SELECT, które chcesz użyć symbolu wieloznacznego:

    set names `utf8`;
    SET COLLATION_CONNECTION=utf8_general_ci;
    SET CHARACTER_SET_CLIENT=utf8;
    SET CHARACTER_SET_RESULTS=utf8;
 1
Author: Lopofsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 09:52:56

Musisz ustawić odpowiednie kodowanie i zestawianie tabel.

Kodowanie tabeli musi odzwierciedlać rzeczywiste kodowanie danych. Jakie jest twoje kodowanie danych?

Aby zobaczyć kodowanie tabeli, możesz uruchomić zapytanie SHOW CREATE TABLE tablename

 0
Author: Your Common Sense,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 18:42:16

Kiedy chcę rozwijać niewrażliwe wyszukiwanie wielkości liter, zawsze konwertuję każdy ciąg znaków na małe litery przed wykonaniem comparasion

 0
Author: Rbacarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 19:07:44

Dobrze w mysql 5.5, jak operator jest insensitive...so jeśli twoja vale to elm lub ELM lub Elm lub eLM lub jakikolwiek inny, i używasz " %elm%", wyświetli wszystkie pasujące wartości.

Nie mogę powiedzieć o wcześniejszych wersjach mysql.

Jeśli wejdziesz do Oracle, np. work jako case-sensitive, więc jeśli wpiszesz " % elm%", będzie to tylko dla tego i zignoruje wielkie litery..

Dziwne, ale tak to jest :)

 0
Author: user21546,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-24 12:29:16
SELECT name 
       FROM gallery 
       WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' 
       GROUP BY name COLLATE utf8_general_ci LIMIT 5 
 -1
Author: user4189641,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-28 12:52:25