Rozejrzałem się dookoła i nie znalazłem, o co mi chodzi, więc proszę.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Działa to dobrze, ale nie, jeśli drzewo nosi nazwę Elm lub ELM itp.
Jak sprawić, by SQL nie rozróżniał wielkości liter w tym wyszukiwaniu symboli wieloznacznych?
Używam MySQL 5 i Apache.
mysql
sql
sql-like
case-insensitive
David Morrow
źródło
źródło
BINARY
takie jak tutaj: stackoverflow.com/questions/7857669/…like
powinien domyślnie nie uwzględniać wielkości liter.Odpowiedzi:
W rzeczywistości, jeśli dodasz
COLLATE UTF8_GENERAL_CI
do definicji kolumny, możesz po prostu pominąć wszystkie te sztuczki: zadziała to automatycznie.Spowoduje to również przebudowanie wszystkich indeksów w tej kolumnie, dzięki czemu będą mogły być używane do zapytań bez wiodącego „%”
źródło
COLLATE UTF8_GENERAL_CI
do definicji kolumny, możesz po prostu pominąć wszystkie te sztuczki: zadziała to automatycznie.ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
. Spowoduje to również przebudowanie wszystkich indeksów w tej kolumnie, dzięki czemu będą mogły być używane do zapytań bez wiodącego „%”.Zawsze rozwiązałem to, używając niższej:
źródło
Rozróżnianie wielkości liter jest określone w ustawieniach sortowania kolumn / tabel / bazy danych. Możesz wykonać zapytanie w ramach określonego sortowania w następujący sposób:
na przykład.
(Zamień na
utf8_general_ci
dowolne zestawienie, które uznasz za przydatne)._ci
Oznacza wielkość liter ma znaczenie .źródło
utf8_general_ci
jednak działa dobrze.COLLATE
albo wykonać prostą sztuczkę, taką jak ta (LOWER()
obie struny przed porównaniem)SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
Oto przykład prostej kwerendy LIKE:
Teraz rozróżniana jest wielkość liter przy użyciu funkcji LOWER ():
źródło
COLLATE
problemami z formatemPo prostu użyj:
Albo użyj
Obie funkcje działają tak samo
źródło
Robię coś takiego.
Pobieranie wartości małymi literami i MySQL zajmuje się resztą
I dla MySQL PDO Alternative:
źródło
Myślę, że to zapytanie spowoduje wyszukiwanie bez rozróżniania wielkości liter:
źródło
posługiwać się
ILIKE
zadziałało dla mnie !!
źródło
Nie potrzebujesz
ALTER
żadnego stołu. Po prostu skorzystaj z następujących zapytań, przed faktycznymSELECT
zapytaniem, którego chcesz użyć z użyciem symbolu wieloznacznego:źródło
dobrze w mysql 5.5, podobnie jak operator jest niewrażliwy ... więc jeśli twoją doliną jest wiąz, ELM lub Wiąz lub eLM lub jakikolwiek inny i użyjesz np. '% elm%', wyświetli wszystkie pasujące wartości.
Nie mogę powiedzieć o wcześniejszych wersjach mysql.
Jeśli korzystasz z Oracle, na przykład pracuj z rozróżnianiem wielkości liter, więc jeśli wpiszesz „% elm%”, przejdzie tylko do tego i zignoruje wielkie litery.
Dziwne, ale tak to jest :)
źródło
*_ci
, co oznacza „bez uwzględniania wielkości liter”. Ponieważ zdarza się, że jest to domyślne dla wszystkich obsługiwanych zestawów znaków (problemshow character set;
to sprawdzić) - odpowiedź jest częściowo zgodna z prawdą :-) Tylko przyczyna jest nieprawidłowa. To nie operator rozróżnia małe i wielkie litery, to domyślne sortowanie.źródło
Musisz skonfigurować odpowiednie kodowanie i zestawianie tabel.
Kodowanie w tabeli musi odzwierciedlać faktyczne kodowanie danych. Jakie jest twoje kodowanie danych?
Aby zobaczyć kodowanie tabeli, możesz uruchomić zapytanie
SHOW CREATE TABLE tablename
źródło
Kiedy chcę opracować niewrażliwe wyszukiwanie wielkości liter, zawsze dokonuję porównania każdego łańcucha na małe litery
źródło
Możesz użyć następującej metody
użyj tej metody jak poniżej
źródło
Nie-binarne porównania ciągów (w tym
LIKE
) domyślnie nie rozróżniają wielkości liter w MySql: https://dev.mysql.com/doc/refman/en/case-sensitivity.htmlźródło