Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z kodowaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
magusia
Tabela ma ustawione kodowanie latin1_swedish_ci, tak samo pole które chcę przeszukiwać w tej tabeli.
Strona (kodowanie UTF-8) zawiera formularz w którym użytkownik wpisuje tekst jaki ma zostać znaleziony. Chcę umożliwić mu wpisanie tekstu z dowolną wielkością liter i znalezienie odpowiedniego wyniku w bazie. Tj. jeśli użytkownik wpisze żyrafa, to ma mu znaleźć zarówno Żyrafa jak i żyrafa, jak i ŻYRAFA itd itd.
W tym momencie zrobiłam tak, że WHERE wygląda następująco:
  1. WHERE LOWER(moje_pole) LIKE "%'.$szukane_slowo.'%"

Przed porównaniem również $szukane_slowo przepuszczam przez strtolower() i dodatkowo funkcję zamieniającą duże polskie znaki (Ą, Ć, Ź itd) na małe.
Nie mogę zmienić kodowania tabeli ani strony. Wszystko musi pozostać tak jak jest. Niestety LOWER zmienia jakoś kodowanie i jak np. chcę wyświetlić dane przepuszczone prze MySQL-owy LOWER są w nich krzaczki. Dlatego też z porównania nic mi nie wychodzi:(
Próbowałam
  1. <?php
  2. iconv("utf-8","iso-8859-1",$szukane_slowo)
  3. ?>

ale gdy szukane_slowo zawierało polskie litery twierdził, że zawiera niedozwolone znaki.
Podsumowując, jeśli namieszałam zbyt dużo w opisie;)
Potrzebuję zrobić szukanie po słowie wpisanym w formularzu kompletnie niewrażliwe na wielkość znaków po stronie zarówno bazy jak i wpisanego do formularza słowa. Wpisuję 'żyrafa', w bazie mam 'Żyrafa' i powinno znaleźć ten właśnie rekord.
wijet
Moze powinno byc kodowanie latin2,u siebie mam takie i nie ma problemów.
To troche omijanie problemu a nie rozwiazanie,ale powinno zadzialac:

  1. SELECT * FROM tabela WHERE lower(pole) LIKE concat('%',lower(pole),'%');
magusia
Cytat(wijet @ 3.07.2007, 19:09:07 ) *
Moze powinno byc kodowanie latin2,u siebie mam takie i nie ma problemów.
To troche omijanie problemu a nie rozwiazanie,ale powinno zadzialac:

  1. SELECT * FROM tabela WHERE lower(pole) LIKE concat('%',lower(pole),'%');


Hmm, a gdzie tu miejsce na porównanie z daną z formularza?
wijet
ups tongue.gif
  1. SELECT * FROM tabela WHERE lower(pole) LIKE concat('%',lower($pole_formularza),'%');
magusia
Cytat(wijet @ 3.07.2007, 19:19:35 ) *
ups tongue.gif
  1. SELECT * FROM tabela WHERE lower(pole) LIKE concat('%',lower($pole_formularza),'%');


Niestety...
  1. LOWER(pole)
zwraca tekst z krzaczkami, a
  1. LOWER($pole_formularza)
bez krzaczków. Zapewne wynika to z tego, że w bazie już są krzaczki. Jakieś inne pomysły?sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.