Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mysql order by utf-8 polskie znaki
AxZx
post 5.09.2006, 17:02:19
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


witam

chce sortowac kolumny z nazwami wojewodztwa wg jego nazwy
dlaczego łódzkie jest na koncu? za zachodniopomorskim?

kodowanie tabeli utf-8

wersja mysql:
4.1.21-log

zapytanie:
  1. CREATE TABLE `wojewodztwa` (
  2. `woj_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `woj_nazwa` varchar(45) character SET utf8 collate utf8_unicode_ci NOT NULL,
  4. PRIMARY KEY (`woj_id`),
  5. UNIQUE KEY `unikalna` (`woj_nazwa`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
SongoQ
post 5.09.2006, 19:22:27
Post #2





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


Klient MySQLa musi pracowac w utf-8.

  1. SET character_set_client = utf8


Jak nie pomoze to dorzuc
  1. SET character_set_results = utf8
  2. SET character_set_connection = utf8


--------------------
Go to the top of the page
+Quote Post
AxZx
post 5.09.2006, 22:47:59
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


przed kazdym moim zapytaniem daje

  1. <?php
  2. mysql_query('SET NAMES 'utf8'');
  3. mysql_query('SET character_set_client 'utf8'');
  4. mysql_query('SET character_set_results 'utf8'');
  5. mysql_query('SET character_set_connection 'utf8'');
  6. ?>


rezultat taki sam jak wczesniej


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
SongoQ
post 6.09.2006, 07:33:51
Post #4





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


Na pewno poprawne kodowanie masz w bazie?


--------------------
Go to the top of the page
+Quote Post
AxZx
post 8.09.2006, 18:47:40
Post #5





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


tak mi sie wydaje

takie zapytanie napisalem do stworzenia tabeli w ktorej chce sortowac

  1. CREATE TABLE `wojewodztwa` (
  2. `woj_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `woj_nazwa` varchar(45) character SET utf8 collate utf8_unicode_ci NOT NULL,
  4. PRIMARY KEY (`woj_id`),
  5. UNIQUE KEY `unikalna` (`woj_nazwa`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Ten post edytował AxZx 8.09.2006, 18:48:25


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
wolan
post 9.09.2006, 13:58:41
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 28.10.2004

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


zamiast utf8_unicode_ci ustaw utf8_polish_ci...
Go to the top of the page
+Quote Post
AxZx
post 9.09.2006, 22:00:43
Post #7





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


a co w przypadku gdy chce tez korzystac z cyrylicy?
wtedy sortowanie bedzie poprawne w tym i w trym jezyku?winksmiley.jpg


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
marcin110987
post 20.06.2011, 07:08:48
Post #8





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 20.06.2011

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


Cytat(AxZx @ 5.09.2006, 18:02:19 ) *
witam

chce sortowac kolumny z nazwami wojewodztwa wg jego nazwy
dlaczego łódzkie jest na koncu? za zachodniopomorskim?

kodowanie tabeli utf-8

wersja mysql:
4.1.21-log

zapytanie:
  1. CREATE TABLE `wojewodztwa` (
  2. `woj_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `woj_nazwa` varchar(45) character SET utf8 collate utf8_unicode_ci NOT NULL,
  4. PRIMARY KEY (`woj_id`),
  5. UNIQUE KEY `unikalna` (`woj_nazwa`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Wysilę się dla potomych, bo sam jakiś czas szukałem rozwiązania lepszego niż zmiana kodowania kolumny w tabeli z utf8_general_ci na utf_polish_ci.

Jeśli robisz zapytanie w postaci:
  1. SELECT * FROM `wojewodztwa` WHERE 1 ORDER BY `nazwa`
to wynik dostaniesz w kodowaniu takim jak masz zakodowaną kolumnę `nazwa`. Czyli w utf8_general_ci polskie znaki będziesz miał inaczej niż się przyjęło w polskim alfabecie. Np. 'Ł' za 'Z', czy 'Ż' i 'Z' w tym samym miejscu.


Z pomocą przychodzi COLLATE dla zapytania:
  1. SELECT * FROM `wojewodztwa` WHERE 1 ORDER BY `nazwa` COLLATE utf8_polish_ci
teraz nie ważne jest jak masz zakodowane dane w bazie, bo i tak wynik będzie w utf_polish_ci, a resztę możesz mieć cyrylicą i doklejać do siebie wyniki w różnych alfabetach.

Jeśli chcesz czytać z php wyniki, to nie zapomnij o ustawieniu zaraz za połączeniem z bazą "set names utf8", bo dostaniesz krzaki.
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: 25.05.2025 - 05:27