Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie danych w utf-8, Problem z sortowaniem danych z bazy MySQL w stronie kodowej utf-8
ziemot
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2005

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


Witam!

Problem to generalnie sortowanie danych pochodzacych z bazy MySQL. Mimo przewertowania forum nie udalo mi sie znalezc rozwiazania, ktore by zadzialalo w moich warunkach... no ale moze od poczatku, najpierw konfiguracja:

serwer bazy danych: MySQL 4.1.16, dziala na Windows XP, uruchamia sie jako serwis przy starcie systemu, w pliku konfiguracyjnym my.ini ustawione jest:

[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8

php: 4.4.2

aplikacja nad ktora siedze zawiera nazwy miast i wojewodztw.

1. Problem pojawia sie przy sortowaniu nazw wojewodztw:
konfiguracja tabeli:
storage engine: MyISAM
collation: utf8_polish_ci
wybieram z tabeli wszystkie wojewodztwa nastepujacym zapytaniem:
SELECT * FROM wojewodztwa ORDER BY NazwaWoj COLLATE "utf8_polish_ci"
a wynik jest cokolwiek dziwny:
Dolnośląskie
Kujawsko-Pomorskie
Łódzkie
Śląskie -> (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !!!!!
Lubelskie
Lubuskie
Świętokrzyskie -> (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !!!

dalej jest juz w porzadku

Co z tym zrobic?

2. Drugi problem wychodzi przy wyszukiwarce miast, użytkownik podaje nazwę miasta, aplikacja łączy się z bazą danych, wyszukuje miasto i zwracana jest tablica z wszystkimi wystąpieniami zadanego ciągu znaków.
Wszystko jest ok dopoki na poczatku ciagu znakow nie ma polskiej litery -> pierwszy znak przerabiam ucfirst() na wielka litere i dziala, natomiast jesli pierwszym znakiem jest polska litera (np Łomża) to podajac w wyszukiwarce nazwe miasta z malej litery nie dziala ucfirst() - nie zamienia mi malej polskiej litery na duza, a potem baza nie wyszukuje danych. Wrowadzajac ta sama nazwe miasta do wyszukiwarki z wielka pierwsza litera, otrzymuje poprawny wynik.

Co jest nie tak?
konfiguracja tabeli:
storage engine: MyISAM
collation: utf8_general_ci

zapytanie SQL:
SELECT ms.ID_Miejsca, ms.NazwaMiejsca, ms.ID_TypuMiejsca, ms.MiejsceAKT, wms.OldNazwaMiejsca FROM miejsca AS ms LEFT JOIN wydarzenia_miejsca AS wms ON ms.ID_Miejsca = wms.ID_Miejsca WHERE ms.MiejsceAKT = 1 AND (ms.NazwaMiejsca LIKE "%'.$string.'%" OR wms.OldNazwaMiejsca LIKE "%'.$string.'%") GROUP BY ms.ID_Miejsca ORDER BY ms.NazwaMiejsca COLLATE "utf8_polish_ci"

formularz html do ktorego wprowadza sie nazwe miasta jest ustwiony na wprowadzanie znakow w stronie kodowej utf-8:
<form action="i.php?id=51" method="POST" accept-charset="utf-8">

Gdzie tkwi blad? Oczywiscie mozna dorobic jakas funkcje przerabiajaca male polskie znaki na poczatku ciagu znakow na duze litery..., ale to jest rozwiazanie takie, hmm, lopatologiczne, czy na prawde nie ma rozwiazania innego, latwiejszego?

ZiemoT
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 25.08.2025 - 06:34