Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie polskich znaków - problem z kodowaniem, MySQL robi problem z wielkością polskich znaków diaktrycznych w wyszuk
Tomplus
post
Post #1





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z kodowaniem, a dokładnie z wyszukiwaniem słów z polskimi znakami przez wyszukiwarkę na stronie w bazie danych MySQL.
Problem polega na tym że w bazie są słowa z małych i dużych liter. np. ciepły, CIEPŁY zamiennie.

Wyszukiwarka bez żadnego problemu znajduje rekordy gdzie wpiszę słowo z polską DUŻĄ literą lub polską MAŁĄ literką.

czyli na przykładzie:
szukając CIEPŁY - znajduje wszystkie rekordy z CIEPŁY, szukając ciepły znajduje wszystkie rekordy ciepły, a... szukając ciepŁy znajduję słowa CIEPŁY (prawidłowo, bo wielkość liter ma nie być uwzględniana)

Teraz proszę o pomoc w rozwiązaniu problemu dlaczego zapytanie MySQL zwraca uwagę na wielkość polskich i jak zrobić aby MySQL nie zwracał uwagi na wielkość polskich znakiów.

Szczegóły techniczne:
Strona oraz pliki PHP/wyszukiwarki są kodowane w UTF-8
MySQL rekordy są kodowane w UTF8_general_ci

sprawdzałem działanie funkcji PHP oraz MySQL:

mb_strtolower()
strtolower()

z połączoną funkcją MYSQL dla kolumny i wyszukiwanego elementu:
CONVERT()
LOWER()

fragment zapytania mysql: (LOWER(t.wyszukiwanie) LIKE LOWER('%{$nazwa}%') )

innych pomysłów nie mam.
Go to the top of the page
+Quote Post
kartin
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Pomysł z LOWER() lub UPPER() jest uniwersalny i w zasadzie niezależny od bazy danych.


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


jednakże i tak jest to zbędne bo utf8_general_ci podczas wyszukiwania znaków nie uwzględnia wielkości liter czyli jak wpiszę:

%ciep% to znajdzie mi te które mają słowo CIEPŁO jak i ciepło, ale jak wpiszę
%ciepło% to znajdzie mi tylko te słowa które mają w bazie z małą literę Ł.
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
Go to the top of the page
+Quote Post
Tomplus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nie rozumiem co chcesz mi przekazać. Bo Convert stowałem a COLLATE mam ustawiony jako UTF8 i nadal problem z wyszukaniem.
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Spróbuj z COLLATE tak:
  1. SELECT `sth` FROM `table` WHERE LOWER(`column`) LIKE LOWER('%sth%') COLLATE utf8_polish_ci


Ten post edytował Turson 18.09.2014, 07:44:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 21:43