![]() |
![]() ![]() |
![]() |
-mkdes- |
![]()
Post
#1
|
Goście ![]() |
Czy wiecie, że jeśli macie tabele w kodowaniu utf8_general_ci to dla wszystkich polskich znaków działa szukanie bez polskich znaków.
Oprócz litery "Ł" oraz "ł". Czyli szukając LIKE %lukasz% nie znajdzie wam rekordu ze słowem "łukasz". Natomiast dla reszty działa dobrze, czyli np. szukając "kortka" znajdzie rekord ze słowem "kórtka". Wiecie jak to rozwiązać? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ustaw collation tabeli na utf8 pl
Kod alter table NAZWA_TABELI convert to character set utf8 COLLATE utf8_polish_ci;
-------------------- |
|
|
-mkdes- |
![]()
Post
#3
|
Goście ![]() |
Nie, nie o to chodzi.
Twój sposób tym bardziej nie będzie działał. Ja chcę odnaleźć rekordy zawierające literę "ł" kiedy w zapytaniu wpiszę "l". |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
przyłaczam sie do tematu ,aby nie zakładać nowego równiez mi zalezy aby wyszukiwać dane z tabel nie podająć w zapytaniu polskich znaków
-------------------- Nie udzielam pomocy poprzez PW
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 18.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
zmiana collation tabeli zmienia jedynie to że przy sortowaniu alfabetycznym Ł nie znajduje się na końcu listy, za Z, ale dalej nie wyszukuje
![]() Nie wiem czy to przypadkiem nie jest jakiś bug mysql, gdzieś na coś takiego natrafiłem |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 34 Dołączył: 22.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
skoro w bazie jest Ł a ty chcesz znales L to raczej zmiany kodowan nic nie dadza... musisz zrobic funkcje ktora bedzie ci tlumaczyc w zapytaniu wszystkie polskie znaki
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Właśnie dadzą dla ąćęóśżź ale nie dla ł.
http://bugs.mysql.com/bug.php?id=9604 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie dadzą dla ąćęóśżź ale nie dla ł. http://bugs.mysql.com/bug.php?id=9604 Nie umiesz przeczytać co chce kolo uzyskać? Wpisujesz Laska a ma znaleść Łaska jest różnica miedzy Laska a Łaska... czyli gościu chce uzyskać efekt że jak analfabeta wpisze w polu Laska zamiast Łaska albo Lyzwy zamiast Łyżwy to mu i tak znajdzie poprawnie... Tak jak masz to w google... Oczywiście najlepiej będzie napisać funkcje w php która wyszuka wszystkie rekordy zawierające wszystkie możliwości... ![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
bo dajesz link do buga... który tu mu nie pomoże ;P trzeba napisać funkcje która za pomocą str_replace lub innej magicznej funkcji pozamienia znaczki i po każdej zmianie zapyta grzecznie baze danych czy coś takiego tam jest... potem wypisze to mu ładnie :ziewa:
co ma do tego bug? może kiedyś go poprawia a jemu przestanie to działać tak? myśleć w przyszłość trzeba ;P ------------------- Jeśli poczułeś sie urażony to sorry ;P taki mam charakter ;P |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Bug to ma do tego, że powyżej pojawiły się sugestie, że zmiana algorytmu porównywania coś pomoże. Właśnie nie pomoże, bo od pięciu lat bug wisi, a MySQL go nie uważa za bug.
Dla Ciebie może taki link jest bezużyteczny, mnie się wydaje że warto mieć go w dyskusji, żebyśmy wiedzieli o czym w ogóle mowa. Taki już mam charakter ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dobra dobra...
------------------------ ok! załóżmy że wysyłasz POSTa w którym masz "Laska"... PHP go odbiera w funkcji która ma obsłużyć zapytanie... do tej funkcji dopiszemy coś ale wcześniej stworzymy inną ;P Dla analfabetów...
funkcja zamienia w textcie L na Ł za każdym razem! nawet jeśli to nie był bład! i teraz w swojej funkcji w miejscu wyciagania z SQL musisz coś w podobie zrobić:
poradzisz sobie? P.s. mogłem pogubić cudzysłowy bo pisane na kolanie ;P ale... mam nadzieje ze załapiesz ;P |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Problem się zacznie, jak chcąc wyszukać 'olałem' ktoś wpisze 'olalem'
![]() |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
A jesteśmy dopiero na pojedyńczych słowach. Pomyśl co by było gdyby chodziło o wyszukanie kilku? Każde kolejne l zwiększa dwukrotnie liczbę kombinacji.
Można próbować wyszukiwanie z wyrażeniem regularnym: Kod SELECT 'olałem' RLIKE 'o(l|ł)a(l|ł)em'
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
ok wiec można połączyć nasze rozważania ;P
znowu moja funkcja ale poprawiona na lepszejszą
a w SQL:
szanowny kolega widzi jakiś kolejny problem? Ten post edytował MTF 25.02.2010, 19:30:04 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Pomijając SQL injection?
Tylko taki, że niestety będzie to wolniejsze niż gdyby zajął się tym sam MySQL. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
-mkdes- |
![]()
Post
#19
|
Goście ![]() |
Co dziwne, wielkie Goo.... nie znalazło nic w polskich sajtach na ten temat.
No trudno, musiałem zrobić Test The West. Ale tu także nic. Rozpoczęły się testy By MkDes. Wyniki-> Żaden z systemów kodowania znaków dostepnych w bazie danych mysql nie pozwala na wyszukiwanie polskich znaków bez polskich znaków. Prawie idealny jest typ character set utf8_general_ci - tylko ma problemy z literą "ł". nie znajduje wyrazów z "ł" łłłyyy jak wpisze "l" -lllyyyy. No to może windows-1250. Super, jest łłłłłyyyyyy 'ł'. Chwila zadowolenia, kolejne próby. Kur......a (kura) nie ma "ś"->"s". Czyli jak wpisze "s" to nie znajduje wyrazów z "ś". Nie pomagały żadne COLLATE itp. Jedynym rozwiązaniem jest usuwanie z danych polskich znaków i zapisywanie ich do oddzielnej tabeli, a potem wykorzystywanie tej tabeli podczas szukania. Mysql plese, hear the woice from Poland, WE WANT CORRECT "L"->"Ł" interpretation in utf8_general_ci. Jeśli pomogłem kliknij pomógł. Additionals: http://bugs.mysql.com/bug.php?id=9604 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
A dlaczego wpisując "l" ma szukać także "ł" ? trochę nietypowe zachowanie wyszukiwarki, która zamiast "łaski" znajdzie "laski"
![]() -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.05.2025 - 05:58 |