Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Zmiana serwera i przenoszenie bazy danych
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam, przenosiłem stronę z jednego serwera na drugi i mam problem z kodowaniem.

Ustawienia kodowania serwera 1:
System porównań dla połączenia MySQL: utf8_general_ci
Kodowanie napisów dla MySQL: UTF-8 Unicode (utf8)
Metoda porównywania napisów: utf8_general_ci
Kodowanie strony: utf-8 (zapisane przy pomocy notepad, utf-8 bez bom)

Ustawienia kodowania serwera 2:
System porównań dla połączenia MySQL: utf8_general_ci
Kodowanie napisów dla MySQL: UTF-8 Unicode (utf8)
Metoda porównywania napisów: utf8_general_ci
Kodowanie strony: utf-8 (zapisane przy pomocy notepad, utf-8 bez bom)

Ustawienia serwera 1 == Ustawienia serwera 2




Na tym obrazku przedstawione są litery: ę ó ą ś ł ż ź ć ń.
Pierwszy rządek to litery, które były zakodowane w pierwszej bazie i w drugiej tuż po imporcie, niestety, ale na stronie wyskoczyły krzaki po tym imporcie, mimo iż litery w bazie wyglądają tak samo. Drugi rządek to zaś litery w drugiej bazie po dodaniu ze strony. Czyli z tego co zauważyłem, oba serwery (bazy) mają taką samą konfigurację, ale inaczej zapisują znaki, a więc mam teraz zrobić, aby mi strona nie krzaczyła?

Proszę o pomoc.
RafaelX
a podczas exportu ustawiłes kodowanie na utf-8 ?
in5ane
Tak, na 100%.
Prym
Miałem kiedyś taki przypadek na takim słabszym hostingu. ogólnie za nic nie mogłem wyeksportować poprawnie danych do drugiej bazy. rozwiązaniem okazało się przeniesienie danych łopatologicznie smile.gif czyli export z phpmyadmin bez zapisu do pliku (eksporcik wyświetli się w textboxie) w 2 zakładce odpaliłem 2 baze i wkleiłem po kawałku (tabela po tabeli) baze 1 smile.gif

jakbym to miał robić często pewnie coś bym kombinował ale jednorazowo - po co się męczyć
in5ane
Nic nie daje, próbowałem. Tu chodzi o to, że one w tej drugiej bazie powinny być zakodowane tymi innymi znaczkami.
Prym
hmm a te krzaczki to ci się pojawiają fizycznie w tabeli bazy? czy po wyciągnięciu na strone?

bo jeśli na stronie się krzaczy a w bazie masz ok to może nie użyłeś po połączeniu z bazą ustawienia kodowania:
$query("SET NAMES UTF8"); // takie zapytanie ustawiające sposób kodowania połączenia.

jak nie to przykro mi ale nie miałem innych kłopotów z kodowaniem smile.gif jak narazie
_Martin_
Również miałem taki problem sprawdź jakie masz kodowanie w bazie w tabelach np tabela: "userzy" w strukturze.
Potem sprawdź czy stronie masz kodowanie ustawione te same jak w bazie danych bo to zawsze można pomylić lub przeoczyć!
in5ane
@Prym: no te krzaki na stronie, a w tabeli podałem jak jest. Pierwszy rządek na obrazku to tak było w starej tabeli i było dobrze, a w tej nowej tabeli jest tak i jest źle. W tej nowej tabeli dobrze na stronie wyświetla się, jak polskie znaki są jak te w drugim rządku.

@_Martin_: no to jest właśnie metoda porównywania napisów i jest utf-8.

@edit: $query = mysql_query ("SET NAMES UTF8"); nic nie pomogło.

@edit2: a może jest jakieś replace dla MySQL, powiedzmy zamieniam znaki z pierwszego rzędu na znak z drugiej rzędu (we wszystkich rekordach z całej bazy)? (bo jak zamieniłem sobie jeden znak to działał, więc jak to zrobić ze wszystkim za jednym razem?)

Jeżeli ktoś wie jak porobić te replace, to proszę o pomoc. Bo z tym chyba najszybciej zrobię, niż z myśleniem, dlaczego jest tak przy tym exporcie/imporcie.

Jednak nie jestem pewny, czy ta zamiana znaczków na 100% zadziała, więc jeżeli ktoś ma pomysł na dobry export/import, to proszę o pomoc.
_Martin_
Cięzka sprawa ale po co "replace"? przecież to musi hulać i bez tego!
A Może po prostu na starym serwerze miałeś php4 a na nowym php5 ? albo odwrotnie smile.gif
P.S Robiłeś kopie w postaci .SQL czy .gz questionmark.gif
in5ane
Na serwerze numer jeden jest PHP 4. JEDNAK JEST WERSJA 5 (TAK SIĘ WYŚWIETLIŁO W IMPORCIE DANYCH Z BAZY)
Na serwerze numer dwa jest PHP 5.

Kopia była w postaci SQL.

P.S.: W sumie masz rację, że nie ma co się bawić w replace. Ale co dalej z tym exportem/importem?


@edit:
Zerknąłem, ze na pierwszym serwerze w bazie rozszerzenie php to mysqli, a na drugim serwerze w bazie to mysql.

Zaś wersja serwera w pierwszym to 5.0.67, a w drugim to 4.1.23-log. Wersje protokołu są takie same (10). (to są dane z phpMyAdmin)

Zerknąłem na na metodę porównywania napisów dla samej bazy (nie tabele czy rekordy czy cała baza danych) to jest latin1_swedish_ci (i to jest i na jednym serwerze i na drugim). Po zmianie na drugim serwerze na utf-8 nic nie dało, więc wróciłem do tego latin1 jak było.

Strona jest dostępna na razie pod adresem: http://dancepiortrkow.boo.pl (to już na nowym serwerze).


Serwer 1:
-- phpMyAdmin SQL Dump
-- version 3.1.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Czas wygenerowania: 09 Mar 2009, 07:40
-- Wersja serwera: 5.0.67
-- Wersja PHP: 5.2.9

Serwer 2:
-- phpMyAdmin SQL Dump
-- version sql.boo.pl
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Czas wygenerowania: 09 Mar 2009, 07:39
-- Wersja serwera: 4.1.23
-- Wersja PHP: 5.2.5

Jeżeli ktoś ma pomysł, to proszę o pomoc.
erix
Cytat
Strona jest dostępna na razie pod adresem: http://dancepiortrkow.boo.pl (to już na nowym serwerze).

IMHO najgorszy hosting, limitują, co się tylko da. winksmiley.jpg Ale to tak przy okazji.

Cytat
@edit: $query = mysql_query ("SET NAMES UTF8"); nic nie pomogło.

Po ściągnięciu backupu na HDD, otwórz jakimś notatnikiem obsługującym UTF i dopisz samo zapytanie na początku dumpa.
in5ane
Dzięki wszystkim, poradziłem sobie.
Orkan
Cytat(in5ane @ 9.03.2009, 22:20:09 ) *
Dzięki wszystkim, poradziłem sobie.


to fajnie i naprawde sie ciesze w imieniu wszystkich przyszlych forumowiczow z tym samym problemem sciana.gif

--
Czy Twój komentarz jest odpowiedzią na temat? Nie. Masz coś do powiedzenia autorowi wątku, co nie ma nic wspólnego z problemem - użyj PW. Po to jest.

erix
Rude Dude
Chciałbym dorzucić swoje 3 grosze. Męczyłem się właśnie z tym kodowaniem i w wyniku połączenia informacji z dwóch różnych for internetowych znalazłem takie o to rozwiązanie.

  1. mysql_query('SET character_set_connection=utf8');
  2. mysql_query('SET character_set_client=latin2_general_ci');
  3. mysql_query('SET character_set_results=latin2_general_ci');
  4. mysql_query("set names latin2;");

Wstawiamy ten kod w naszym configu.
Kodowanie w bazie to utf-8, a kodowanie na stronie to np. w moim przypadku iso-8859-2. Dodanie tych linijek spowodowało, że krzaczki znikły. Mam nadzieję że się komuś to przyda 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.