Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]latin1 -> utf8 konwersja w locie
Forum PHP.pl > Forum > Przedszkole
zdzichu
Witajcie.
Zastanawia mnie, czy istnieje możliwość konwersji "w locie" bazy danych z latin1 do utf8 - baza ma kilkaset mb, i bardzo kłopotliwe jest wrzucanie jej, konwersja gżegżółką, i ponowny import. Samo ustawienie metody porównywania znaków na utf8 oczywiście nic nie daje, skoro same dane były kodowane w latin1. W przepastnych czeluściach internetu nie znalazłem żadnego rozwiązania... czy ktoś jednak takowe zna? z góry dzięki za odpowiedzi
vokiel
iconv
mb_convert_encoding

zdzichu
jakie ustawić kodowanie wejściowe w iconv ?
coś tego typu:
Kod
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "UTF-8");
iconv("ISO-8859-2//", 'UTF-8', $data);

nie zdaje egzaminu
nospor
  1. $data = iconv("ISO-8859-2", 'UTF-8', $data);

i juz
vokiel
Ew też tak, jak nie znasz źródłowego:
  1. $data = mb_convert_encoding( $data, 'UTF-8', mb_detect_encoding( $data));
nospor
Cytat
Ew też tak, jak nie znasz źródłowego:

Cytat
czy istnieje możliwość konwersji "w locie" bazy danych z latin1


@vokiel winksmiley.jpg
zdzichu
hmm, nie działa - i nie bardzo wiem czemu.
postaram się dostarczyć teraz więcej informacji, może będą pomocne.
tabela źródłowa i wynikowa ma metodę porównywania napisów utf_8_general_ci
dane w pierwszej bazie są jednak tak naprawdę zakodowane w latin-1 - wykonuję jednak migrację danych i nadal w tabeli wynikowej mam krzaki. jest to napewno wynik złego kodowania, bo gdy dodaję ręcznie wpisy, to są polskie ogonki (więc na stronie jest ustawiony dobry meta tag etc)
ktoś może ma pomysł, gdzie może tkwić błąd?
nospor
to moze pokaz caly kod jak ty dokonujesz tej migracji, bo moze tam jest blad.
zdzichu
spróbowałem teraz czegoś takiego:
Kod
function translate($data){
    //return iconv("ISO-8859-2", 'UTF-8', $data);
    return mb_convert_encoding( $data, 'UTF-8', mb_detect_encoding( $data));
}

i otrzymuję:
Kod
Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in /xxx/dbConventer.php on line 221


vokiel
Widocznie nie rozpoznaje kodowania, możesz podać z palca (skoro wiesz w jakim jest)
  1. mb_convert_encoding($str, "UTF-8", "ISO-8859-2");


BTW: A czy przypadkiem latin1 to nie jest ISO-8859-1 ?
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.