Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie wg. polskich znaków
Forum PHP.pl > Forum > Bazy danych > MySQL
tsharek
witam:)

pamiętam coś że ten problem już był poruszany na forum, ale tera szukam i szukam i jakoś nie mogę znaleźć:(

otóż jak zmusić mysqla żeby sortował wyniki zapytania wg. polsich znaków. (np. *.order by tekst posortuje mi wg. kolumny tekst, ale to co się zaczyna od polskiego znaku daje na koniec). czy da się coś takiego osiągnąć nie zmieniając konfiguracji mysqla? czy da się to zrobić tylko z poziomu php? mam mysqla odpalonego na windowsie 2000, ale sortowanie powinno działać wszędzie:).

z góry dziękiuję za odpowiedź

pozdrawiam
tsharek
Vertical
Możesz oczywiście dać "ORDER BY tekst DESC", ale wtedy znaki A-Z da Ci również w odwróconej kolejności... pokombinuj coś z funkcją ereg
tsharek
nie o to mi chodziło:)
chodzi o konfiguracje mysqla z poziomu php:)
misterLu
Cytat
chodzi o konfiguracje mysqla z poziomu php:)

Mozesz to sprecyzować?
Konfiguracji MySQLa z punktu widzenia php można dokonac w pliku php.ini.
scanner
my.ini - ustawienia mysql'a
default-charset =Latin2

Powinno IMHO wystarczyć
misterLu
Cytat
my.ini - ustawienia mysql'a
default-charset =Latin2

Powinno IMHO wystarczyć

Do czego wystarczyc? Przecież ORDER BY (wykonywane w bazie) nie ma nic wspólnego z tym , jakie kodowanie ustawisz w pliku php.ini.
Aby ORDER BY uwzględniał polskie znaki, trzeba mysql'a odpalić z opcją 'default-collation = latin2'.
Wtedy będzie sortował 'po polsku'.
Ale to nie wszystko. Niektóre indeksy moga już być posortowane domyślną metodą, czyli bez uwzględnienia polskich znaków.
Wtedy musisz dla każdej tabeli wykonać komendę:
myisamchk -r -q --set-character-set=charset
więcej znajdziesz tu: http://dev.mysql.com/doc/mysql/en/Character_sets.html

A z poziomu php można to rozwiązać następująco:
<?
//na początku skryptu
setlocale (LC_COLLATE, 'pl_PL');

//zczytać wiersze z bazy do tablicy..
$array=array("zebra", "ananas", "łąka", "laka", "nisko", "ńańka");
//flaga strcoll mówi, ze stringi będą porównywane z uwzględnieniem lokalnych znaków
usort($array, 'strcoll');
print_r($array);
?>
scanner
Masz całkowitą rację.
Tylko jedna uwaga - mówiłem o my.ini a nie php.ini smile.gif
tsharek
wielkie dzięki za odpowiedzi:) namewno skożystam z rad:) tylko wydawało mi się że może istnieć jakiś sposób zmieniania my.ini z poziomu php (tak jak to się ma dla php.ini) dla pojedyńczego kompilowania kodu php. no ale jak się nie da to sprubuje pogadać z adminem żeby zmienił konfila my.ini.

Pozdrawiam serdecznie
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.