Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL 4.1 <--> MySQL 4.1
Forum PHP.pl > Forum > Bazy danych > MySQL
escaflowne
Witam!

Sytuacja wygląda tak: są sobie dwie maszyny: A i B. Na obu tych maszynach zainstalowany jest MySQL 4.1 (4.1.16 na A i 4.1.17 na B). Chcę skopiować bazę danych xyz z serwera A na serwer B. Charset dla tej bazy danych (+ dla wszystkich jej tabel) to latin2, a collation to latin2_general_ci. Rodzaj tabel to MyISAM.
Próbowałem przetransferować dane na różne sposoby:
1. Export do pliku sql na serwerze A przy pomocy mysqldump z użyciem opcji --default-character-set=latin2, po czym spakowanie do pliku .tgz, przesłanie przez FTP na maszynę B, rozpakowanie i import przy pomocy mysql. Import do pustej bazy danych, której default charset to latin2 a default collation to latin2_general_ci. Dane importują się bez problemu, ale strona, która te dane pobiera i wyświetla (JPortal) zamiast pliterek wyświetla ?.

2. Transfer przy pomocy narzędzia MySQL Migration Toolkit, uruchomionego na maszynie C. Przez wysłaniem danych na serwer docelowy podałem default charset i default collation. Rodzaj tabel ustawiłem na MyISAM. Dane przeniosły się bez problemu, ale na stronie widać ? zamiast polskich znaków diakrytycznych

3. Wejście na maszynie A do katalogu, w którym trzymane są bazy danych, spakowanie katalogu zawierającego bazę danych xyz, przesłanie jej na maszynę B, rozpakowanie, wgranie katalogu do katalogu, gdzie trzymane są bazy danych MySQL. Efekt? Polskie literki są jak należy. Ale... okazuje się, że do bazy danych zastosowany został domyślny charset (latin1) i domyślny collation (latin1_swedish_ci) serwera. Wywaliłem bazę danych, do my.cnf dopisałem poniższe linijki:
Cytat
default-character-set=latin2
default-collation=latin2_general_ci

zrestartowałem MySQLa i jeszcze raz skopiowałem folder z bazą danych. Teraz charset i collation przyznane bazie danych są OK, ale polskie znaki znów zamieniły się w ?.

Co ciekawe, jeżeli podejrzę zawartość dowolnej tabeli (w której znajdują się polskie znaki) w phpMyAdminie, to polskie znaki wyświetlają się jak najbardziej prawidłowo (na obu maszynach).
Kolejna ciekawostka: jeżeli zmodyfikuję stronę (na serwerze B) tak, żeby pobierała dane z serwera MySQL na maszynie A, to zamiast pliterek znów widać ?. Dane pobierane z bazy danych na serwerze A przez witrynę znajdującą się na tymże serwerze (A) wyświetlane są prawidłowo. Dwie witryny, na dwóch różnych maszynach, obie pobierają dane z tego samego serwera MySQL, ale różnie wyświetlają polskie znaki.

Podsumowując... jestem w kropce smile.gif Zaczynam podejrzewać, że winne jest php (php 4.4.0 na A i php 5.1.1 na B).
Nie mogę tylko zrozumieć, jak to możliwe, że polskie znaki pobierane z bazy danych, której collation to latin1_swedish_ci wyświetlane są prawidłowo, a jak zmienić collation i charset na latin2 to wszystko się sypie smile.gif
Dobra, załóżmy, że zostawię tę bazę danych na szwedzkim kodowaniu, polskie znaki wyświetlają się prawiłowo, ale teraz pytanie: co się stanie z danymi, które zostaną wprowadzone do bazy danych po jej wgraniu na serwer? Czy te nowe dane będą mieć prawidłowo zachowane polskie znaki?

pozdrawiam,
w kropce będący escaflowne sad.gif
FiDO
Cytat(escaflowne @ 2006-01-16 13:32:15)
Co ciekawe, jeżeli podejrzę zawartość dowolnej tabeli (w której znajdują się polskie znaki) w phpMyAdminie, to polskie znaki wyświetlają się jak najbardziej prawidłowo (na obu maszynach).

I to jest dowod na to, ze dane przeniosly sie poprawnie. Rozna moze byc natomiast konfiguracja serwerow, przez co dane wysylane do klientow (np. php) moga byc rozne, aczkolwiek da sie to zmienic z poziomu php wywolujac odpowiednie zapytanie i o ile pamietam PMA wlasnie tak robi.

Proponuje powrocic do tej sytuacji, w ktorej w PMA dane wyswietlaja sie dobrze. Nastepnie do konfiguracji docelowego mysql'a dopisz takie linijki:
Kod
default-character-set=latin2
collation-server=latin2_general_ci
character-set-server=latin2
init-connect='SET NAMES latin2'

I sprawdz jeszcze raz w jakiejs swojej aplikacji (upewniajac sie, ze ma ona zdefiniowany odpowiedni content-type).
escaflowne
Cytat(FiDO)
[...]
Proponuje powrocic do tej sytuacji, w ktorej w PMA dane wyswietlaja sie dobrze. Nastepnie do konfiguracji docelowego mysql'a dopisz takie linijki:
Kod
default-character-set=latin2
collation-server=latin2_general_ci
character-set-server=latin2
init-connect='SET NAMES latin2'

[...]

Gdzie jest przycisk "Pomógł"? winksmiley.jpg

Wstawienie tych opcji do my.cnf pomogło. Znaki wyświetlają się prawidłowo. Jakby coś się zmieniło dam znać, a póki co serdecznie dziękuję za pomoc.
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.