Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Witam.

Mam problem - mam dumpa (ok. 600 mega) zakodowanego w UTF-8. Docelowa baza jest kodowana w latin2. Myślałem, że dodanie SET NAMES 'latin2'; na samym początku dumpa powinno rozwiązać sprawę, niestety nie.

Konwersja dumpa na latin2 nie wchodzi w rachubę przede wszystkim ze względu na jego rozmiar (chyba, że znacie jakieś linuxowe narzędzie które w miarę sprawnie zrobi to na desktopowym sprzęcie).

W związku z powyższym mam pytanie - jak to zrobić?

Z góry dzięki za odpowiedzi.

konto usunięte

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

ICONV

konto usunięte

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

A próbowałeś w drugą stronę? Na początku dumpa dać:


SET NAMES UTF8
SET CHARACTER SET UTF8


Baza powinna sama skonwertować.
Jeśli nie to przecież programów do konwersji ogonków jest mnogo.

http://www.ogonki.agh.edu.pl/
Tomasz Zadora

Tomasz Zadora programuję

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.


$ mysqldump --help|more
$ mysql --help|more


I zobacz opcje.


$ mysqldump --default-character-set=utf8 ... > dump.sql
$ mysql --default-character-set=latin2 ... < dump.sql


W miejsce ... nazwy baz i użytkowników. Powinno zadziałać, w każdym razie warto sprawdzić.

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Dump jest zrobiony z SQLite i tylko lekko zmodyfikowałem składnię, żeby była kompatybilna z MySQL - po to ten dump.

iconv i econv niby konwertują plik prawidłowo, enca pokazuje poprawne kodowania a mimo to niektóre znaki nie konwertują się tak, jak powinny, np. "Ł" na symbol Funta Szterlinga :)

Dodam, że nic nie stoi na przeszkodzie, aby sama tabela w przeciwieństwie do pozostałych tabel w bazie była zakodowana w UTF-8.

EDIT:

Załączam pierwsze linijki dumpa w wersji UTF-8 (przynajmniej tak pokazuje enca).



SET NAMES UTF8;
SET CHARACTER SET UTF8;
CREATE TABLE numery(<tutaj definicja tabeli>) ENGINE MyIsam;

Paweł S. edytował(a) ten post dnia 09.11.11 o godzinie 16:50

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Paweł S.:
Konwersja dumpa na latin2 nie wchodzi w rachubę przede wszystkim ze względu na jego rozmiar (chyba, że znacie jakieś linuxowe narzędzie które w miarę sprawnie zrobi to na desktopowym sprzęcie).

A w którym miejscu chcesz robić konwersje?
Po co latin2 w docelowej bazie?

Ja bym zrobił tak:

1. wciągnął dumpa do MySQL [UTF-8]
2. PHPMyAdminem zmienił kodowania bazy z UTF-* na latin2.

3. pomyślał o zrobieniu 10 mniejszych dumpów w przypadku problemów z długim czasem konwersji.

UWAGA: nie resetuj kompa jeśli zbyt długo się przetwarza - baza docelowa Ci zniknie - cały katalog :D

enca pokazuje poprawne kodowania a mimo to niektóre znaki nie konwertują się tak, jak powinny, np. "Ł" na symbol Funta Szterlinga :)

Co to jest enca?

Skąd wiesz, że Ł to funt szterling? Gdzie to widzisz?

Ja ostatnio miałem taki problem:


Obrazek



Obrazek
Paweł P. edytował(a) ten post dnia 09.11.11 o godzinie 21:27
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Przy wyświetlaniu danych z bazy dobrze jest sprawdzić kilka punktów:
- kodowanie danych w tabeli (w phpMyAdmin jest to tzw. "Metoda porównywania napisów")
- kodowanie połączenia z bazą danych (dobrą praktyką jest wykonanie np. "SET NAMES utf8" przy inicjalizacji połaczenia)
- domyślne kodowanie serwera www (w Apache2 poprzez AddDefaultCharset w pliku httpd.conf)
- domyślne kodowanie PHP (parametr default_charset w pliku php.ini)
- kodowanie strony HTML (tag meta "Content-Type")
- kodowanie pliku w którym znajduje się kod wyświetlający dane (np. skryptu PHP)

Jeśli nieumiejętnie ustawimy powyższe kodowania, niespodziewanie możemy dostać "krzaczki" zamiast polskich znaków.Łukasz Schabek edytował(a) ten post dnia 09.11.11 o godzinie 22:10
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Eh nie ma to jak problemy ze zmianą kodowania bazy danych :)

Jak już masz dump to sprobój przkonwertować to co jest ... pod linuxem:
iconv -f UTF8 -t CP1250 [plik_zrodlowy] > [plik_wynikowy]


Pare razy dostalem od kolegów SQL'a napisanego na Windowsie i konwert z cp1250 na utf8 pomógł. Zakładam ze w drugą stronę także zda egzamin.

konto usunięte

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Po co taki krok wstecz z kodowaniem!? Zostaw bazę w UTF-8. Zaktualizuj resztę kodu do współczesnego kodowania.

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Kornel L.:
Po co taki krok wstecz z kodowaniem!? Zostaw bazę w UTF-8. Zaktualizuj resztę kodu do współczesnego kodowania.

To nie ja jestem adminem bazy :) Oficjalne wytłumaczenie jest następujące: "Bo z UTF-8 są problemy" :)

Finally - okazuje się, że konwersja kodowania dumpa pomogła, tylko korzystałem z jakiegoś pokopanego klienta MySQL który miał problem z poprawnym wyświetlaniem polskich znaków w Latin2. Nie polecam nikomu Nerocode MySQL Client :) A ile nerwów mnie to kosztowało...
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: [MySQL] Dump UTF-8 -> Baza Latin2.

Kornel L.:
Po co taki krok wstecz z kodowaniem!? Zostaw bazę w UTF-8. Zaktualizuj resztę kodu do współczesnego kodowania.

To że takie kodowanie a nie inne to wcale nie krok wstecz. Często zdarzało się, że programiści operowali w interface'ach programów na długościach stringów. Zmiana kodowania na UTF jest wtedy zabójcza dla programu - klienta bazy danych a same przeprogramowanie klienta jest często bardzo trudne zwłaszcza kiedy program jest bardzo duży. Jaki programista stawiał koment albo flage przy takej operacji w celu jej późniejszej poprawy?

Następna dyskusja:

[mysql] select * from baza ...




Wyślij zaproszenie do