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 ->

Lubelskie
Lubuskie
Świętokrzyskie ->

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