Czy ktoś może mi powiedzieć, czy SELECT
zapytanie MySQL domyślnie rozróżnia małe i wielkie litery? A jeśli nie, jakie zapytanie musiałbym wysłać, aby móc zrobić coś takiego:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
W rzeczywistości rzeczywistą wartością Value
jest IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Odpowiedzi:
Są wrażliwe na wielkość liter , chyba że zrobić porównanie binarne .
źródło
Możesz pomniejszyć wartość i przekazany parametr:
Innym (lepszym) sposobem byłoby użycie
COLLATE
operatora, jak wspomniano w dokumentacjiźródło
SELECT
oświadczenieCOLLATE
?LOWER()
lub dowolnaCOLLATE
klauzula może całkowicie ominąć indeks, a wraz z upływem czasu, wraz ze wzrostem tabeli, może to mieć drastyczny wpływ na wydajność. Czy to są nazwy użytkowników, których szukasz? Użyj sortowania bez rozróżniania wielkości liter i dodaj unikalny indeks do kolumny. Użyj,EXPLAIN
aby potwierdzić, że indeks jest używany.WYKORZYSTAJ BINARY
To jest prosty wybór
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
To jest wybór z binarnym
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
lub
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
źródło
Porównania nie uwzględniają wielkości liter, gdy kolumna używa sortowania, które kończy się na
_ci
(na przykład sortowanie domyślnelatin1_general_ci
), i rozróżniają małe i wielkie litery, gdy kolumna używa sortowania, które kończy się na_cs
lub_bin
(np.utf8_unicode_cs
Iutf8_bin
sortowania).Sprawdź układanie
Możesz sprawdzić serwer , bazę danych i zestawienia połączeń, używając:
i możesz sprawdzić sortowanie tabel za pomocą:
Zmień układanie
Możesz zmienić sortowanie bazy danych, tabeli lub kolumny na wielkość liter, w następujący sposób:
W twoich porównaniach rozróżniana jest teraz wielkość liter.
źródło
Porównanie ciągów w wyrażeniu GDZIE nie rozróżnia wielkości liter. Możesz spróbować porównać za pomocą
lub
i otrzymasz ten sam wynik . To jest domyślne zachowanie MySQL.
Jeśli chcesz, aby porównanie uwzględniało wielkość liter , możesz dodać
COLLATE
tak:Ten SQL dałby inny wynik z tym: WHERE
colname
COLLATE latin1_general_cs = 'keyword'latin1_general_cs
jest powszechnym lub domyślnym zestawieniem w większości baz danych.źródło
Wybrane sortowanie określa, czy rozróżnia się wielkie i małe litery.
źródło
Domyślnie rozróżniana jest wielkość liter, ale następną najważniejszą rzeczą, na którą powinieneś zwrócić uwagę, jest sposób, w jaki tabela została utworzona, ponieważ możesz określić rozróżnianie wielkości liter podczas tworzenia tabeli.
Poniższy skrypt tworzy tabelę. Zauważ na dole, że jest napisane „COLLATE latin1_general_cs”. To cs na końcu oznacza, że wielkość liter ma znaczenie. Jeśli chcesz, aby w tabeli nie rozróżniano wielkości liter, możesz pominąć tę część lub użyć polecenia „COLLATE latin1_general_ci”.
Jeśli Twój projekt umożliwia utworzenie własnej tabeli, sensowne jest określenie preferencji rozróżniania wielkości liter podczas tworzenia tabeli.
źródło
SQL Select nie rozróżnia wielkości liter.
Ten link może pokazać, jak zrobić, z rozróżnianiem wielkości liter: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-rozróżnia wielkość liter.html
źródło
Spróbuj z:
źródło
Zauważ również, że w nazwach tabel rozróżniana jest wielkość liter w systemie Linux, chyba że ustawisz
lower_case_table_name
dyrektywę config na 1 . Wynika to z faktu, że tabele są reprezentowane przez pliki, w których rozróżniana jest wielkość liter w systemie Linux.Szczególnie uważaj na rozwój systemu Windows, który nie rozróżnia wielkich i małych liter, i wdrażanie go tam, gdzie jest. Na przykład:
przeciwko tabeli myTable odniesie sukces w systemie Windows, ale w Linuksie ponownie, chyba że zostanie ustawiona wyżej wspomniana dyrektywa.
Odnośnik tutaj: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
źródło
lower_case_table_name
zgodnie z odpowiedzią, pod którą komentujemyAktualnie akceptowane rozwiązanie jest w większości prawidłowe.
Jeśli używasz łańcucha niebinarnego (CHAR, VARCHAR, TEXT), w porównaniach nie jest rozróżniana wielkość liter , według domyślnego sortowania.
Jeśli używasz ciągu binarnego (BINARY, VARBINARY, BLOB), w porównaniach rozróżniana jest wielkość liter, więc musisz użyć
LOWER
opisanego w innych odpowiedziach.Jeśli nie używasz domyślnego sortowania, a używasz łańcucha niebinarnego, o tym, czy wybrano sortowanie, decyduje wielkość liter.
Źródło: https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html . Przeczytaj uważnie. Niektórzy inni mylnie stwierdzili, że w porównaniach z konieczności rozróżniana jest wielkość liter lub nie jest uwzględniana wielkość liter. Nie o to chodzi.
źródło
Możesz tego spróbować. mam nadzieję, że się przyda.
źródło
W polach ciągów z ustawioną flagą binarną zawsze będzie rozróżniana wielkość liter. Jeśli potrzebujesz rozróżnić małe i wielkie litery w polu tekstowym niebinarnym, użyj tego: WYBIERZ „test” REGEXP BINARNY „TEST” JAKO WYNIK;
źródło