Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie SQL: LIKE, UPPER z polskimi znakami diakrytycznymi
Forum PHP.pl > Forum > Bazy danych
jakubmroz.com
Witam,
Mam pewien problem. Mianowicie w bazie mam tabele, w której jest pole Varchar. Kodowanie UTF8, general_polish_ci. Pole zawiera imię i nazwisko z polskimi znakami diakrytycznymi (ą,ć,ł...) chciałbym aby SELECT'em wybrać te wiersze gdzie pole imieinazwisko = podane imie i nazwisko (z formularza, z pośrednictwem PHP).

Zapytanie SELECT imieinazwisko FROM mojatabela WHERE UPPER(imieinazwisko) LIKE '%$wartosc%' nie działa. Zastanawiam się czy zapytanie zbudowałem źle czy też użycie UPPER jest niepoprawnie zastosowane.

Jak najłatwiem rozwiązać ten problem?

Doszedłem do etapu I czyli "poznanie problemu".

Zapytanie powinno wygl±dać następuj±co:
SELECT UPPER(imieinazwisko) FROM mojatabela WHERE imieinazwisko LIKE '%ŁUCJA RWĘĆKA%'

Problem teraz z '%ŁUCJA RWĘĆKA%'
JoShiMa
Gotowiec:

  1. <?php
  2. function zamien($txt) {
  3. $txt = strtr($txt,"ˇĆĘŁŃӦݬ±ćęłń󶿼","ACELNOSZZacelnoszz");
  4. $txt = strtr($txt, array("a"=>"[a±]","c"=>"[cć]","e"=>"[eę]",
  5. "l"=>"[lł]","n"=>"[nń]","o"=>"[oó]","s"=>"[s¶]","z"=>"[zżĽ]"));
  6. $txt = strtr($txt, array("A"=>"[Aˇ]","C"=>"[CĆ]","E"=>"[EĘ]",
  7. "L"=>"[LŁ]","N"=>"[NŃ]","O"=>"[OÓ]","S"=>"[S¦]","Z"=>"[Zݬ]"));
  8. return $txt;
  9. }
  10.  
  11. $txt = zamien("cwierc ŻÓŁWIA");
  12. $wynik = mysql_query("SELECT * FROM tabela WHERE opis RLIKE '$txt'"); // WHERE opis RLIKE '[cć]wi[eę]r[cć] [Zݬ][OÓ][LŁ]WI[Aˇ]';
  13. ?>
jakubmroz.com
Dziękuję za ciekawy pomysł.
Udało mi się z powyższym zapytaniem. W phpMyAdminie nie działa ze względu na "nie wymuszone" kodowanie znaków.
W PHP wystarczy zmienić kodowanie na utf, zamienić na duże litery i po sprawie.
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.