MySQl i porównywanie dużych liter

0

Jak zrealizować select na bazie aby zwracał uwagę na wielkość liter i rozróżniał napisy np. "User" i "user"
Mam bazę danych z na serwerze z ustawieniem kodowań fontów:
character-set-server=utf8
collation-server=utf8_unicode_ci
Nie jestem tu asem ale z tego co wiem to "collation-server" oznacza stronę kodowa brana przy porównywaniu stringów. Jak zrobiłem sobie selecta na bazie to wyszło na to że select nie rozróżnia wielkości liter i np. na szukanie słowa "user" zwraca "User" i "user".
Ta cecha przyda mi sie jak dla wyszukiwarki zainstalowanej na mojej stronie ale powoduje problemy przy logowaniu userów. Np. Userzy mike i Mike uznawani sa z tych samych. Dla celów logowania userów (i sprawdzania ich haseł) musiałbym więc dokonywać dokładnych wyszukań sprawdzających wielkości liter.
Znalazłem w google dwa przykłady:
binary:
SELECT * FROM demo WHERE name = BINARY 'Foo';
i collocate
SELECT * FROM demo WHERE name = 'Foo' COLLATE utf8_bin;
Pytanie: Co jest lepsze dla działania na varchar i czy są jakieś ograniczenia (haczyki) dla tych zapytań. Czy nie będą się konfliktowały z jakimiś ustawieniami serwera (np. strony kodowej)?

0

Ja wiem tylko że w utf8_unicode_ci oznacza case insensitive. Możesz przed wywołaniem właściwego zmieniać na utf8_unicode/utf8_unicode_cs i tyle. Mam nadzieję że zadziała.

0

No pewno zadziała ale to ma być baza dla strony www a nie kilku sporadycznych zapytań więc zmiana stron kodowej dla collation za każdym razem gdy ktoś sie loguje wydaje mi się dość kłopotliwe. A na stałe nie chcę zmienic bo inaczej wyszukiwarka na stronie tez będzie szukała z uwzględnieniem wielkości liter co będzie wpływało na wyniki wyszukań.

0

Ustaw wszędzie case sensitive - a w wyszukiwarce w zapytaniu dasz LOWER i tyle. Np

select * from table where lower(`twoje_przeszukiwane_pole`)="Twoja szukana fraza"

a dodatkowo jeszcze po stronie serwera (php czy czego tam uzywasz) - zrób jakiś string.toLower... czy jakoś tak :)

0
axelbest napisał(a):

Ustaw wszędzie case sensitive - a w wyszukiwarce w zapytaniu dasz LOWER i tyle. Np

select * from table where lower(`twoje_przeszukiwane_pole`)="Twoja szukana fraza"

a dodatkowo jeszcze po stronie serwera (php czy czego tam uzywasz) - zrób jakiś string.toLower... czy jakoś tak :)

Ale pytający pytał tak: "Jak zrealizować select na bazie aby zwracał uwagę na wielkość liter i rozróżniał napisy np. "User" i "user"" :)

BINARY i tyle. Będzie dobrze :)

0

Dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1