|
apache, mysql - brak polskich znaków odczytywanych z db
matyskiewicz - 17-11-2008 15:34
Witam, Zainstalowałem Debiana, apache, mysql, phpmyadmin, a następnie zrobiłem prostą stronę testową. Strona nie wyświetla polskich znaków wczytywanych z bazy danych. Dla testu wykonałem:
<?php ... echo 'ąćńłóżźć'; echo $row['test']; //wartość zmiennej ąćńłóżźć ... ?>
po odpaleniu skryptu w przeglądarce Czyli jak widać apache koduje według ustawień w edytorze, php.ini itp UTF-8 bez BOM Natomiast baza danych generuje błędy. Pójdźmy dalej: rekord test został wygenerowany za pomocą phpmyadmin, w którym domyślne kodowanie to utf8, tak samo jak tabela, kolumna itp. Po eksporcie bazy do pliku *.sql i odczytaniu przed dowolny edytor polskie znaki są wyświetlane poprawnie.
Czy ktoś ma pomysł w czym leży błąd, usterka?
fenix23 - 18-11-2008 11:33
Oczywiście problemy są z kodowanie. I wydaje mi się że musisz uściślić co i jak zostaje wyświetlane. Do sprawdzenia jest:
-kodowanie pliku php w konsoli (domyslnie ISO) -kodowanie w apache2 (miałem problem że na siłę kodował w utf8) -kodowanie danych wpisanych w phpmyadminie -kodowanie danych wpisanych za pomocą skryptu z powłoki.
Oczywiście całość musi mieć to samo kodowanie ale to jest oczywiste.
matyskiewicz - 19-11-2008 13:02
Dziś wykonałem 2 testy: 1. Postawiłem na windowsie serwer WAMP (w którym nie miałem takich problemów) i przekopiowałem pliki php jak i dane do bazy. Rezultat taki jak na debianie 2. Wyeksportowałem dane z bazy danych za pomocą XMLa do Accessa no i polskie znaki są.
1. nie rozumiem pytania 2. utf8 3. utf8-general-ci (domyślnie, tabela, komórka itp...) 4. nie rozumiem pytania
Czyli wygląda na to ze w Mysql jest wszystko ok, czyli prawdopodobnie źle koduje apache... No ale: echo 'żćźńłóęą';
wyświetla ok...
fenix23 - 19-11-2008 13:23
1. nie rozumiem pytania 2. utf8 3. utf8-general-ci (domyślnie, tabela, komórka itp...) 4. nie rozumiem pytania
1. Jeśli piszemy w konsoli to plik ma również jakieś kodowanie. jak napiszemy echo ąźźżżććłłłłóóóóńńńęęę > plik i wydamy poleceni file plik to zobaczymy w jaki sposób plik jest kodowany. Osobiście pracuje na mcedit i on zapisuje pliki w domyslnym kodowaniu powłoki. Popatrz też na locale
4. Do bazy mysql możemy dwojako wpisywać dane. Jeden sposób to skrypt zakodowany tak jak w konsoli a drugi to wpisane ręcznie przez phpmyadmina które może mieć kodowanie zależne od tego jakie mamy kodowanie w phpmyadminie.
cat /etc/apache2/conf.d/charset
w tym miejscu można sprawdzić wymuszone kodowanie w apache2. Może do czegoś się przyda.
Gdzieś czytałem że można gdzieś te dane z bazy przekodować w razie potrzeby ale jak masz możliwość nie rozpieprzając bazy ustawić wszystko jednolicie to chyba będzie najlepiej.
matyskiewicz - 19-11-2008 13:43
No to już coś mamy. 4. UTF-8 1. Zakodował jakieś ("a umlat" itp...) po odczytaniu w przeglądarce (plik.txt) wyświeliły się:
Ponadto na serwerze zainstalowałem forum phpbb no i również są polskie znaki? Wykonałem plik również przez vim no i również są krzaczki. Masz jakaś propozycję zmiany tego problemu. Ja już nie wiem kompletnie co to może być...
fenix23 - 19-11-2008 14:04
A jak przestawisz w przeglądarce kodowanie na właściwe to jest dobrze?
PS: Wstawiaj listingi za pomocą Listing
matyskiewicz - 19-11-2008 14:58
A jak przestawisz w przeglądarce kodowanie na właściwe to jest dobrze?
Też nie :/
grucha - 19-11-2008 23:00
Bazę miałeś czystą, czy wgrywałeś z backupu? Jak się mają metody porównywania napisów w bazie do charsetów ustawionych na serwerze?
matyskiewicz - 20-11-2008 11:01
Baza była budowana na bieżąco bezpośrednio przez phpmyadmin na serwerze. Porównywanie napisów zarówno w bazie, tabeli jak i komórce jest ustawione na UTF8-general-ci
[ Dodano: 2008-11-24, 08:20 ] Znalazłem artykuł pośrednio rozwiązujący ten problem: http://wortal.php.pl/wortal/artykuly..._znaki_a_mysql
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|