Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wielkość polskich liter w like - mysql

89 views
Skip to first unread message

Sławek

unread,
Apr 29, 2013, 11:51:44 AM4/29/13
to
Witam

Wprawdzie posłałem już taki post na grupę bazy danych ale pozwoliłem
sobie rónież tu go powtórzyć ponieważ wielu z programistów php jak nie
większość pracuje z mysql. Mam nadzieję, że się zbytnio nie narażę:)
Może ktoś z grupowiczów pomoże.
Mam baze danych pola kodowane w utf8_unicode_ci i generalnie wszystko
jest w porządku. Chodzi o LIKE gdy używam w zapytaniu a dodam że zależy
mi aby nie rozróżniało wielkości liter to wszystko jest w porządku póki
w słowie nie występuje polski znak przykładowo szukam "zając" w bazie
jest zapisany "ZAJĄC" to już mi nie znajdzie. Oczywiście jak zrobię LIKE
'%ZAJĄC%' to jest ok, zrobię nawet LIKE '%zajĄc%'też znajdzie ale juz
LIKE '%zając%' nie znajdzie. Bardzo mi zależy na tym aby znajdował bez
względu na wielkość liter, również polskich liter.
Co z tym można zrobić?
Próbowałem różnych rad z netu ale jakoś mi nic z tego nie wyszło.
Zresztą do grupy mam większe zaufanie:)
A, bo to też może być istotne - oprogramowuje to w php przy użyciu PDO

z góry serdeczne dzięki za pomoc
pozdrawiam
Sławek

Piotr Kęplicz

unread,
Apr 29, 2013, 3:23:05 PM4/29/13
to
Sławek:
> Mam baze danych pola kodowane w utf8_unicode_ci i generalnie wszystko
> jest w porządku. Chodzi o LIKE gdy używam w zapytaniu a dodam że zależy
> mi aby nie rozróżniało wielkości liter to wszystko jest w porządku póki
> w słowie nie występuje polski znak

Przestaw na utf8_polish_ci i sprawdź.

.pk.

Sławek

unread,
Apr 30, 2013, 3:04:56 AM4/30/13
to
W dniu 2013-04-29 21:23, Piotr Kęplicz pisze:
Niestety baza jest wielojęzyczna i właśnie nie mogę tam przestawić.
Próbowałem deklarować w kodzie php ale to nic nie dało. Dostałem tylko
krzaki:(

Piotr Kęplicz

unread,
Apr 30, 2013, 3:38:53 AM4/30/13
to
Sławek:
>> Przestaw na utf8_polish_ci i sprawdź.
>
> Niestety baza jest wielojęzyczna i właśnie nie mogę tam przestawić.
> Próbowałem deklarować w kodzie php ale to nic nie dało. Dostałem tylko
> krzaki:(

Manual MySQL -> Using COLLATE in SQL Statements.

.pk.

Sławek

unread,
Apr 30, 2013, 4:01:25 AM4/30/13
to
W dniu 2013-04-30 09:38, Piotr Kęplicz pisze:

>
> Manual MySQL -> Using COLLATE in SQL Statements.
>
> .pk.
>

Dawałem w kodzie SET collation_connection = utf8_polish_ci jeśli o to
chodzi ale nie przyniosło to efektów. Dostałem na stronie krzaki a
oczywiście LIKE nie działał tak jak trzeba:(

Sławek

Piotr Kęplicz

unread,
Apr 30, 2013, 4:10:05 AM4/30/13
to
Sławek:
> Dawałem w kodzie SET collation_connection = utf8_polish_ci jeśli o to
> chodzi ale nie przyniosło to efektów.

Chodziło mi raczej o użycie COLLATE w LIKE.

.pk.

Sławek

unread,
Apr 30, 2013, 4:19:02 AM4/30/13
to
W dniu 2013-04-30 10:10, Piotr Kęplicz pisze:
Acha:) A to przy każdym LIKE czy jakoś na końcu zapytania? Bo mam takie
zapytania że jest po 4, 5 tych LIKE

pozdrawiam
Sławek

Piotr Kęplicz

unread,
Apr 30, 2013, 4:30:05 AM4/30/13
to
Sławek:
> Acha:) A to przy każdym LIKE czy jakoś na końcu zapytania? Bo mam takie
> zapytania że jest po 4, 5 tych LIKE

Nie próbowałem. Wydaje się jednak, że COLLATE dotyczy pojedynczego LIKE,
zatem musi być powtarzane.

.pk.

Sławek

unread,
Apr 30, 2013, 4:43:19 AM4/30/13
to
W dniu 2013-04-30 10:30, Piotr Kęplicz pisze:

>
> Nie próbowałem. Wydaje się jednak, że COLLATE dotyczy pojedynczego LIKE,
> zatem musi być powtarzane.
>

OK, dzięki, spróbuję choć wczoraj coś walczyłem ale mi wywalało błąd.
Może coś juz w nerwach pominąłem:) Siądę dziś i na spokojnie to sprawdzę.

dzięki i pozdrawiam
Sławek

Sławek

unread,
Apr 30, 2013, 8:27:09 AM4/30/13
to
W dniu 2013-04-30 10:43, Sławek pisze:
pewnie coś spieprzyłem ale dostaję taki komunikat
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ''%wośp%' COLLATE utf8_polish_ci OR foto.description LIKE
'%wośp%'' at line 1 )



R.e.m.e.K

unread,
Apr 30, 2013, 3:55:12 PM4/30/13
to
Dnia Tue, 30 Apr 2013 14:27:09 +0200, Sławek napisał(a):

>> OK, dzięki, spróbuję choć wczoraj coś walczyłem ale mi wywalało błąd.
>> Może coś juz w nerwach pominąłem:) Siądę dziś i na spokojnie to sprawdzę.
>
> pewnie coś spieprzyłem ale dostaję taki komunikat
> You have an error in your SQL syntax; check the manual that
> corresponds to your MySQL server version for the right syntax to use
> near ''%wośp%' COLLATE utf8_polish_ci OR foto.description LIKE
> '%wośp%'' at line 1 )

A calego selecta pokaz.

--
pozdro
R.e.m.e.K

Sławek

unread,
May 1, 2013, 4:10:04 AM5/1/13
to
W dniu 2013-04-30 21:55, R.e.m.e.K pisze:
Całe zapytanie jest takie
$sql2 = "SELECT foto.*, users.*, album.* FROM foto LEFT JOIN album
USING(id_album) LEFT JOIN users ON album.id_users = users.id_users WHERE
foto.title LIKE '%" . trim($allKey[$i]["key"]) . "%' OR foto.description
LIKE '%" . trim($allKey[$i]["key"]) . "%'";

Oczywiście mam też inne z tym samym problemem ale na tym testuje. Udało
mi się dać tak, że błędu nie było i próbowałem juz wszystkiego co
znalazłem w necie:( Nawet próbowałem zrobić taki myk że zamienić funkcją
lower pole na małe i porównać z tą zmienną php gdzie są małe litery i
też nic. Może też nie chce zamienić polskiej litery:(
Bazę mam kodowaną w utf8_unicode_ci ale juz nawet zmieniłem w przypływie
desperacji na chwilę na utf8_polish_ci, na utf8_general_ci a nawet
utf8_bin - efekt żaden. Nie wiem o co to chodzi. W necie znalazłem, że
powinno być utf8_unicode_ci i tak mam albo właśnie utf8_polish_ci.

pozdrawiam
Sławek

R.e.m.e.K

unread,
May 1, 2013, 5:12:00 AM5/1/13
to
Dnia Wed, 01 May 2013 10:10:04 +0200, Sławek napisał(a):

> Całe zapytanie jest takie
> $sql2 = "SELECT foto.*, users.*, album.* FROM foto LEFT JOIN album
> USING(id_album) LEFT JOIN users ON album.id_users = users.id_users WHERE
> foto.title LIKE '%" . trim($allKey[$i]["key"]) . "%' OR foto.description
> LIKE '%" . trim($allKey[$i]["key"]) . "%'";
>
> Oczywiście mam też inne z tym samym problemem ale na tym testuje. Udało
> mi się dać tak, że błędu nie było i próbowałem juz wszystkiego co
> znalazłem w necie:( Nawet próbowałem zrobić taki myk że zamienić funkcją
> lower pole na małe i porównać z tą zmienną php gdzie są małe litery i
> też nic. Może też nie chce zamienić polskiej litery:(
> Bazę mam kodowaną w utf8_unicode_ci ale juz nawet zmieniłem w przypływie
> desperacji na chwilę na utf8_polish_ci, na utf8_general_ci a nawet
> utf8_bin - efekt żaden. Nie wiem o co to chodzi. W necie znalazłem, że
> powinno być utf8_unicode_ci i tak mam albo właśnie utf8_polish_ci.

Moze problem wynika ze specyfiki dzialania LIKE w MySQLu? W powiazaniu z
UTF8 moze byc dziwnie:

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

--
pozdro
R.e.m.e.K

Darek

unread,
May 23, 2013, 7:49:25 AM5/23/13
to
W dniu 2013-04-29 17:51, Sławek pisze:
U mnie dodanie w warunku LIKE '%zając%' wyszukuje nie uwzględniając
wielkości liter, sprawdzałem na kliku serwerach (Linux) w tym na
localhost (Windows). Co innego szukanie przy pomocy REGEXP tutaj
wielkość liter ma znaczenie. O co chodzi??
0 new messages