![]() |
![]() |
![]()
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 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko rozbija się o kodowanie znaków. W jakim kodowaniu jest przekazany tekst, który dodajesz, i jakie kodowanie przyjmuje interfejs na którym próbujesz podejrzeć dane.
Pomóż sobie zapytaniem 'SET NAMES' |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko rozbija się o kodowanie znaków. W jakim kodowaniu jest przekazany tekst, który dodajesz, i jakie kodowanie przyjmuje interfejs na którym próbujesz podejrzeć dane. Pomóż sobie zapytaniem 'SET NAMES' SET NAMES latin2 nie pomaga. Chyba mnie nie rozumiesz. Spróbuje to wyjaśnić dokładniej. Mam bazę i skrypty obsługi (jakiś tam system). Strona jest kodowana charset=iso-8859-2. Teraz zagwozdka: Przypadek 1: Jeśli ze strony, za pomocą formularza dodaje do bazy tekst zawierający polskie znaki to: - przy odczycie z bazy za pomocą php, na stronie są wyświetlane polskie znaki - jeśli po takim dodaniu, w konsoli za pomocą zapytania select chcę wyświetlić dodany rekord, to w miejscu polskich znaków mam krzaczki. Przypadek 2: Jeśli dodam do bazy tekst zawierający polskie znaki korzystając z konsoli mysqla to: - jeśli po takim dodaniu, w konsoli za pomocą zapytania select chcę wyświetlić dodany rekord, to w miejscu polskich znaków są polskie znaki - czyli OK. - przy odczycie z bazy za pomocą php, na stronie są wyświetlane polskie znaki - najczęściej znaki '?' -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 401 Pomógł: 5 Dołączył: 14.09.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Przypadek 1: (...) - jeśli po takim dodaniu, w konsoli za pomocą zapytania select chcę wyświetlić dodany rekord, to w miejscu polskich znaków mam krzaczki. (...) - jeśli po takim dodaniu, w konsoli za pomocą zapytania select chcę wyświetlić dodany rekord, to w miejscu polskich znaków są polskie znaki - czyli OK. - przy odczycie z bazy za pomocą php, na stronie są wyświetlane polskie znaki - najczęściej znaki '?' Widzę tutaj 2 elementy wspólne - przy dodawaniu z konsoli Ci się sypie, czyli wg mnie masz kodowanie w konsoli źle ustawione i dlatego się sypie. Sprawdz czy tabela napewno ma ustawione kodowanie na iso-2, czy strona na której wszystsko wyświetlasz ma iso-2, czy pierwszym zapytaniem, zaraz po połączeniu z mysql'em jest ustawienie kodowanie na iso-2 (SET CHARACTER SET latin2 - chyba), no i ostatnia rzecz (w tym przypadku od tego bym zaczął) sprawdzić kodowanie w konsoli. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdz czy tabela napewno ma ustawione kodowanie na iso-2, Jak to mogę sprawdzić? czy strona na której wszystsko wyświetlasz ma iso-2, czy pierwszym zapytaniem, zaraz po połączeniu z mysql'em jest ustawienie kodowanie na iso-2 (SET CHARACTER SET latin2 - chyba) To się zgadza , no i ostatnia rzecz (w tym przypadku od tego bym zaczął) sprawdzić kodowanie w konsoli. Zapytanie w konsoli mysqla:
zwraca: Cytat charakter_set_client: latin2
charakter_set_connection: latin2 charakter_set_database: latin1 charakter_set_filesystem: binary charakter_set_results: latin2 charakter_set_server: latin1 charakter_set_system: utf8 charakter_set_dir: D:\Files\MySQL\MySQL Server 5.0\share\charsets Ten post edytował J4r0d 13.06.2006, 14:09:37 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#6
|
|
![]() 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
Pobieranie danych:
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ć:
a w przypadku konsoli mysql na windowsie:
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. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
a w przypadku konsoli mysql na windowsie:
Wpisałem to na konsoli i w momencie kiedy chcę dodać polskie znaki do tabeli otrzymuję komunikat: Cytat #1406 - Data too long for column 'imie' at row 1 ![]() Ps. Nie przekroczyłem długości pola. Wpisuję jedeną literke - np ś i jest błąd. ormalnie mogę wpisać 15znaków (bez polskich liter) Ten post edytował J4r0d 13.06.2006, 21:45:20 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tak jak pisałem, upewnij się, że to faktycznie to kodowanie.
Przejrzałem kodowania obsługiwane przez MySQL i wychodzi, że wiersz poleceń w windowsie XP pracuje w kodowaniu 'DOS Central European'. Czyli polecenie dla konsoli w MySQL będzie wyglądać tak:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak jak pisałem, upewnij się, że to faktycznie to kodowanie. Przejrzałem kodowania obsługiwane przez MySQL i wychodzi, że wiersz poleceń w windowsie XP pracuje w kodowaniu 'DOS Central European'. Czyli polecenie dla konsoli w MySQL będzie wyglądać tak:
Jest to samo, czyli: Cytat #1406 - Data too long for column 'imie' at row 1 EDIT: W pliku my.cnf zahaszowałem linijke Cytat sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" i nie wywala błędu i dodaje do bazy. Ale problem jest nadal. W konsoli mysql po zalogowaniu i wybraniu bazy wpisałem:
a następnie
Następnie daje
i otrzymuję: Cytat 2 2 ? ? 1 TES W phpie tak samo. ----------------------------- EDIT2: Problem rozwiązany. Odinstalowałem Mysqla 5.x. Zainstalowałem Mysql 4.1.9 i wybrałem tryb konfiguracji zaawansowany. Ustawiłem domyślne kodowanie na latin2. Dalej robię tak jak kazałeś i działa pięknie. Dziękuje bardzo. Dam znać czy z Mysql 5.x też będzie działać. Pozdrawiam Ten post edytował J4r0d 14.06.2006, 10:09:44 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 22:41 |