Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie nazw w mysql
MarioP
post 8.07.2006, 12:17:40
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 8.07.2006

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


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

Ten post edytował MarioP 8.07.2006, 12:21:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
ergo
post 8.07.2006, 13:15:21
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.03.2005

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


a czy pozniej zaczyna sortowac normalnie questionmark.gif moze masz jakies biale znaki na poczatku ?


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 8.07.2006, 15:04:56
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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


--------------------
Go to the top of the page
+Quote Post
bendi
post 8.07.2006, 16:51:00
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


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


--------------------
Go to the top of the page
+Quote Post
MarioP
post 8.07.2006, 22:12:04
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 8.07.2006

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


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.

Ten post edytował MarioP 8.07.2006, 22:12:30
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:10