Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Błędne kodowanie podczas pobierania danych z bazy.
Forum PHP.pl > Forum > Przedszkole
miniol
Mam problem z odczytaniem danych z bazy MySQL, a konkretnie z kodowaniem.

Oczywiście z samej bazie wszystkie polskie znaki wyświetlają się poprawnie.

System porównań dla połączenia MySQL (w phpmyadmin): utf8_general_ci
Metoda porównań napisów mojej bazy: utf8_general_ci
Metoda porównań napisów moich tabel: utf8_general_ci
Wszystkie pola tekstowe w mojej tabeli kodowane są również w utf8_general_ci

Mój plik php, który odczytuje dane z bazy jest w formacie UTF-8 bez BOM
W metadanych mam ustawione kodowanie: <meta http-equiv="content-type" content="text/html; charset=utf8" />

Mimo to wszystkie polskie znaki mi się wysypują. Zamiast polskich znaków, pojawiają się tylko znaki zapytania i ten dziwny kwadracik zamiast literki "ó".
Podejrzewam, że to problem z kodowaniem w bazie, ponieważ:
  1. //otrzymuję odpowiedź latin1.


Zmieniałem kodowania w bazie wszędzie gdzie tylko mogłem. Czy ktoś mi może powiedzieć w czym jest problem?

Na koniec dodam jeszcze, że wgrywając bazę użyłem takiej funkcji dla poprawnego kodowania:
  1. //poprawne kodowanie UTF-8
  2. mysql_query("SET CHARSET utf8");
  3. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
sakul55
a jak teraz dodasz cos do bazy i potem wyswietlisz to masz dobre kodowanie, czy zle? ja tak mialem wlasnie ze starymi
miniol
Właśnie dodałem nowy rekord i on również wyświetla się błędnie.
sakul55
teraz zauwazylem tongue.gif

powinno byc utf8_polish_ci a ty masz utf8_general_ci
zmien sobie w phpmyadmin
miniol
Ale co konkretnie zmienić?

Zmieniłem:
System porównań dla połączenia MySQL (w phpmyadmin) na utf8_polish_ci
Metoda porównań napisów mojej bazy na utf8_polish_ci
Metoda porównań napisów mojej tabeli na utf8_polish_ci
Pole tekstowe w mojej tabeli też na utf8_polish_ci

I nadal nic ;/
sakul55
a teraz jak dodajesz na nowo to znowu ten sam blad? bo starych pewnie czytac nie bedzie, ale nowe powinno
miniol
Przy nowych rekordach nadal nic smile.gif

Wydaje mi się, że trzeba się skupić na tym, że mysql_client_encoding wywala mi wartość latin1, a powinien wywalić utf8.

Grzebałem teraz już nawet w konfiguracji mysql i znalazłem takie dwie linijki ciekawe:
character-set-server=latin2
default-character-set=latin2

Jednak nawet jeśli zmieniam latin2 na utf8 to nic to nie pomaga. Zmieniałem też na latin1, i oczywiście też żadnego efektu to nie przyniosło.
sakul55
ale Tobie i tak zwracalo latin1, a nie latin2.

sprobuj uzyc PDO http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO

Temat: MYSQL Polskie znaki




a moze szablon strony masz zly?
jak wpiszesz cos tak po prostu w html z polskimi znakami, albo przez echo to dziala?
Mackos
Cytat(sakul55 @ 31.03.2011, 15:00:16 ) *
powinno byc utf8_polish_ci a ty masz utf8_general_ci

No nie do końca bo powinno być utf8_unicode_ci

dodatkowo w pliku łączenia się z bazą danych dodaj sobie
  1. mysql_query("SET NAMES 'utf8'");

zaraz po mysql_select_db
i sprawdź czy plik z baza jest w utf-8
miniol
Cytat(Mackos @ 31.03.2011, 16:00:13 ) *
No nie do końca bo powinno być utf8_unicode_ci

dodatkowo w pliku łączenia się z bazą danych dodaj sobie
  1. mysql_query("SET NAMES 'utf8'");

zaraz po mysql_select_db
i sprawdź czy plik z baza jest w utf-8

Wstawiłem SET NAMES 'utf8' zaraz po mysql_select_db i wszystko działa pięknie smile.gif Wcześniej miałem tak, że najpierw pobierałem dane z bazy, potem wstawiłem SET NAMES 'utf8' a po tym dopiero wyświetlałem dane w przeglądarce. I to był oczywiście mój błąd ;]

Dzięki za pomoc. Temat do zamknięcia smile.gif
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.