Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie nazw w mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
MarioP
Witam,
przeszukałem chyba wszystkie polskie oraz zagraniczne fora i grupy dyskusyjne. Niestety nie znalazłem rozwiązania problemu. Wszędzie piszą o tym samym, co w moim przypadku nie rozwiązuje problemu.

Mam stronę w kodowaniu utf-8 oraz bazę w takim samym. Niby w bazie jest wszystko na utf8:

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_results utf8
character_set_server utf8
character_set_system utf8

Polecenia, które wywołuję:

  1. mysql_query("SET CHARACTER SET utf8", $s);
  2. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'", $s);
  3. mysql_query("SET character_set_client=utf8", $s);
  4. mysql_query("SET character_set_connection=utf8", $s);
  5. mysql_query("SET character_set_results=utf8", $s);
  6. mysql_query("ALTER DATABASE bazadanych COLLATE utf8_general_ci", $s);
  7. mysql_query("ALTER TABLE tablica CONVERT TO CHARACTER SET 'utf8'", $s);


Wiem, że za dużo zbyt ich, ale już wszyskiego próbuję. Po wywołaniu:

  1. SELECT * FROM tablica ORDER BY 'name' ASC


Otrzymuję listę z takim dziwnym sortowaniem:

...
Le....
Że....
Lu...
Ła...
Śc...
Me...
...

Wygląda na to, że przy sortowaniu zamiast znaku w UTF8 bierze pod uwagę tylko jego "pierwszy znak składowy", czyli zamiast Ż - > Ĺť -> "Ĺ".

Podczas przeglądania bazy w phpMyAdmin oraz na stronie nie wyświetla żadnych krzaków. Bazę importuję z pliku przy kodowaniu utf. Oprócz tego przy tworzeniu każdej tablicy mam dopisane:

  1. CHARSET=utf8 COLLATE=utf8_general_ci


Nadal nie działa poprawnie. Bardzo proszę o pomoc. Całą noc nad tym przesiedziałem i już nie mam więcej sił.
ergo
a czy pozniej zaczyna sortowac normalnie questionmark.gif moze masz jakies biale znaki na poczatku ?
SongoQ
Mi to wyglada na

  1. ALTER TABLE tabela CHANGE `name` `name` VARCHAR( 60 ) CHARACTER SET utf8 COLLATE utf8_polish_ci


lub mozesz zrobic to dla calej tabeli
bendi
Mała poprawka - skoro nie zmieniasz nazwy tabeli to można skorzystać z MODIFY
  1. ALTER TABLE tabela MODIFY `name` VARCHAR( 60 ) CHARACTER SET utf8 COLLATE utf8_polish_ci


Tak tylko sie czepiam smile.gif
MarioP
Problem rozwiązany smile.gif Błąd był naprawdę śmieszny, a tyle nerwów kostował.

ORDER by dodałem do wcześniejszego zapytania, a nie do tego z którego chciałem uzyskać posortowaną tablicę.

  1. SELECT * FROM tablica1 ORDER BY 'name' ASC


Po tej poprawce wyrazy zaczynające się na polskie znaki znalazły się na dole tablicy. Trzeba było zmienić dodatkowo COLLATE z utf8_general_ci na utf8_polish_ci.

  1. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'", $s);


Wszystko już działa jak należy winksmiley.jpg Dzięki za chęć udzielenia pomocy.
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.