Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z polskimi znakami, bez PhpMyAdmina
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


1. Dodałem za pomocą skryptu php nasepujący string do bazy ęąśżźćłó.

Teraz jeśli za pomocą skryptu php pobiorę dane z bazy, to na ekranie widzę polskie znaki.
Natomiast jak dam selecta z konsoli mysql to zamiast ęąśżźćłó widzę dziwne krzaczki


2. Natomiast jeżeli dodam do bazy striga z polskimi znakami korzystając z konsoli mysql, to po wydaniu selecta
(także z konsoli) na ekranie widzę polskie znaki, natomiast po wyciągnięciu danych za pomocą skyrptu php
nie ma polskich znaków - są jakieś krzaczki.

Próbowałem stosować wskazówki, któe znalazłem na forum php, m.in. tutaj http://forum.php.pl/index.php?showtopic=31...l=polskie+znaki nie pomagają.
oraz na różnych innych stronach z googla. Nie ma poprawy

Muszę mieć możliwość edytowania/dodawania z konsoli a nie tylko z poziomu php.
Konsola mi potrzebna jak ktoś coś namiesza do edycji ręcznej.

Proszę o pomoc. Nie korzystam z phpMyAdmina (nie chcę go i nie istalowałem)

Ten post edytował J4r0d 13.06.2006, 07:58:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mariuszn3
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Pokolei:

Ważne jest aby MySQL wiedział jakim kodowaniem operuje klient. Jeśli klient sam nie przesyła informacji o kodowaniu, MySQL wtedy przyjmuje kodowanie domyślne czyli latin1 (iso-8859-1) - można to domyślne kodowanie zmienić w pliku konfiguracyjnym.

W Twoim przypadku - jeśli php czy konsola mysql nie przekazuje informacji o kodowaniu, a można przyjąć, że nie przesyłają (bo same z siebie tego nie robią), MySQL przyjmuje, że wszystkie zapytania jakie od nich dostaje są w latin1 i tak samo zachowuje się w drugą stronę (przy zwracaniu danych na zapytanie). To jest trochę zwodnicze, bo mimo danych zapisywanych do bazy w nie właściwym kodowaniu, można odnosić wrażenie, że jest wszystko ok.. ale dopóki własnie nie spróbuje się pobrać danych poprzez interfejs operujący w innym kodowaniu.
Na przykładzie (który najprawdopodobniej odzwierciedla co się dzieje w Twoim przypadku):
Dodawanie danych
  • php przesyła znaki do wprowadzenia do bazy w kodowaniu iso-8859-2
  • Jako, że php nic nie mówi o kodowaniu w jakim pracuje, MySQL przyjmuje je jako znaki w kodowaniu iso-8859-1 i przekazuje je do tablicy.
  • Zakładamy, że tablica ma domyślne kodowanie ustawione na iso-8859-1 (gdyby było inaczej sprawa by była nieco bardziej skomplikowana). Dane w takiej formie jakiej zostały otrzymane są zapisane do tablicy.

Pobieranie danych:
  • php wysyła zapytanie do bazy (pominę już tłumaczenie kodowania samego zapytania, które wygląda tak samo jak wyżej).
  • Baza przyjmując, że php pracuje w kodowaniu iso-8859-1, jak i biorąc pod uwagę to, że kodowanie tabeli to też iso-8859-1 przesyła dane z tabeli bez żadnej konwersji do php
Reasumując - dane z php są bezpośrednio bez żadnej konwersji zapisywane w bazie danych i podobnie są pobierane - czyli nie dziwne, że dodając i czytając dane z bazy tylko poprzez php wszystko wygląda ok.
Teraz załóż (bo tak też zapewne jest), że konsola mysql pracuje w innym kodowaniu (jeśli to na windowsie to zapewne jest to win-1250) i podobnie jak php nie przesyła danych do mysql na temat kodowania w jakim pracuje. Wtedy dzieje się dokładnie to samo co opisałem wyżej i logiczne jest, że konsola pobierając dane zapisane przez php otrzyma szlaczki i wice wersa.

Aby wszystko razem mogło współgrać serwer mysql musi wiedzieć w jakim kodowaniu pracuje klient a to możesz osiągnąć tylko poprzez odpowiednie informowanie serwera mysql (poprzez 'SET NAMES' właśnie).
Najprawdopodobniej w przypadku php przed jakimikolwiek operacjami powinieneś przesłać:
  1. SET NAMES 'latin2'

a w przypadku konsoli mysql na windowsie:
  1. SET NAMES 'cp1250'

Upewnij się, że faktycznie to są te kodowania, bo jeśli jest inaczej to na pewno będzie kaszana.

Dane, które zapisałeś do bazy uprzednio, bez informowania bazy o kodowaniu usuń albo przekonwertuj... bo teraz podchodząc właściwie do sprawy będziesz dostawał w nich krzaczki.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 12:28