apache, mysql - brak polskich znaków odczytywanych z db

Konfiguracja serwerów, usług, itp.
matyskiewicz
Posty: 5
Rejestracja: 17 listopada 2008, 15:18

apache, mysql - brak polskich znaków odczytywanych z db

Post autor: matyskiewicz »

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:

Kod: Zaznacz cały

<?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
Posty: 62
Rejestracja: 09 października 2008, 17:47

Post autor: fenix23 »

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
Posty: 5
Rejestracja: 17 listopada 2008, 15:18

Post autor: matyskiewicz »

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. kodowanie pliku php w konsoli (domyslnie ISO)
2. kodowanie w apache2 (miałem problem że na siłę kodował w utf8)
3. kodowanie danych wpisanych w phpmyadminie
4. kodowanie danych wpisanych za pomocą skryptu z powłoki.
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:

Kod: Zaznacz cały

 echo 'żćźńłóęą';
wyświetla ok...
fenix23
Posty: 62
Rejestracja: 09 października 2008, 17:47

Post autor: fenix23 »

matyskiewicz pisze: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
Posty: 5
Rejestracja: 17 listopada 2008, 15:18

Post autor: matyskiewicz »

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
Posty: 62
Rejestracja: 09 października 2008, 17:47

Post autor: fenix23 »

A jak przestawisz w przeglądarce kodowanie na właściwe to jest dobrze?

PS: Wstawiaj listingi za pomocą

Kod: Zaznacz cały

[code] Listing 
[/code]
matyskiewicz
Posty: 5
Rejestracja: 17 listopada 2008, 15:18

Post autor: matyskiewicz »

fenix23 pisze:A jak przestawisz w przeglądarce kodowanie na właściwe to jest dobrze?
Też nie :/
Awatar użytkownika
grucha
Beginner
Posty: 345
Rejestracja: 29 września 2007, 01:04
Lokalizacja: Rzeszów / Kraków

Post autor: grucha »

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
Posty: 5
Rejestracja: 17 listopada 2008, 15:18

Post autor: matyskiewicz »

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/po ... ki_a_mysql
ODPOWIEDZ