zapewne bylo to juz walkowane na grupie wiele razy, od dwoch dni zaczytuje
sie archiwum grupy, ale nie moge znalezc kompletnych odpowiedzi i
calosciowego rozwiazania, sam wykonalem rozne proby, ale sprawa jest
powazna, baz do zmiany mam sporo, wiec nie chce zrobic bledu stad pozwolilem
sobie jeszcze raz poruszyc ten temat:
sprawa jest taka, mam baze MySQL (4.1.20) ktora dziala na latin2_general_ci,
do tego serwis w PHP, ktory dziala na
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
dostalem zlecenie na przerobienie tego calosciowo na UTF-8, czy ktos z Was
wykonywal taka operacje i zechcialb sie podzielic swoimi spostrzezeniami
oraz rozwiazaniami? mam na to pewien algorytm, ale nie jestem pewny, czy nie
robie bledu, na razie nie chce go podawac, zeby nic nie sugerowac, chyba, ze
grupa bedzie chciala, chetnie sie podziele tym, dajcie znac tylko
z gory dzieki za okazana pomoc, pozdrawiam
Najprosciej to przekonwertowac w locie strone ..
czyli ladujesz wszystko do zmiennej, potem konwersja (iconv(),
mb_convert_encoding, itp) i potem wypluwasz do przegladarki.
No ale to tylko najprostrze rozwiazanie a nie najlepsze.
Najlepsztym rozwiazaqniem by bylo przekonwertowanie zawartosci baz do formatu
utf-8, czyli robisz sobie automacik ktory odczytuje strukture bazy, pobiera
pierwsza tabele, odczytuje strukture tabeli i wyciaga pola i ich typy.
Najbardziej bedzie cie intreresowal typ znakowy (varchar, char, text,
longtext, itp). Nastepnie na podstawie pola indeksowego pobierasz zawartosc
pola znakowego, dokonujesz konwersji i robisz update .. i tak w petli dla
wszystkich pol i tabel .. wtedy juz bedziesz mial baze w utf-8. Dzieki temu
przyszly (obecny) CMS bedzie mogl wprowadzac odpowiednie znaki. Aha, typ
polaczenia i kodowanie pol tez musisz zmienic na utf-8
Moze istnieje w mysql'u jakas funkcja ktora zrobi autopmatycznie konwersje
znakow, ale to trzeba by popytac na grupie baz danych
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
<-=MERLIN=->
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.lang.php
> Najlepsztym rozwiazaqniem by bylo przekonwertowanie zawartosci baz do formatu
> utf-8, czyli robisz sobie automacik ktory odczytuje strukture bazy, pobiera
> pierwsza tabele, odczytuje strukture tabeli i wyciaga pola i ich typy.
> Najbardziej bedzie cie intreresowal typ znakowy (varchar, char, text,
> longtext, itp). Nastepnie na podstawie pola indeksowego pobierasz zawartosc
> pola znakowego, dokonujesz konwersji i robisz update .. i tak w petli dla
> wszystkich pol i tabel .. wtedy juz bedziesz mial baze w utf-8. Dzieki temu
> przyszly (obecny) CMS bedzie mogl wprowadzac odpowiednie znaki. Aha, typ
> polaczenia i kodowanie pol tez musisz zmienic na utf-8
Oj, ale komplikujesz :)
mysqldump --set-charset=latin2 > plik-iso.sql
[... rach-ciach-ciach w jakimś edytorze, polecam pajączka ...]
mysql --set-charset=utf8 < plik-utf8.sql
--
Borys Pogoreło
borys(#)leszno,edu,pl
Czy nie chodziło ci wcześniej o "przerobienie tego _calosciowo_ na UTF-8"?
artur
bardzo możliwe. Każ jeszcze tylko bazie danych trzymać dane w formacie
utf8 przerabiając odpowiednie pola. Baza sama postara się i konwersję.
--
Pozdrawiam
Lemat
> Dnia 24 May 2007 09:52:07 +0200, Tomasz Śledź napisał(a):
>
>> Najlepsztym rozwiazaqniem by bylo przekonwertowanie zawartosci baz do
>> formatu
>> utf-8, czyli robisz sobie automacik ktory odczytuje strukture bazy,
>> pobiera
>> pierwsza tabele, odczytuje strukture tabeli i wyciaga pola i ich typy.
>> Najbardziej bedzie cie intreresowal typ znakowy (varchar, char, text,
>> longtext, itp). Nastepnie na podstawie pola indeksowego pobierasz
>> zawartosc
>> pola znakowego, dokonujesz konwersji i robisz update .. i tak w petli
>> dla
>> wszystkich pol i tabel .. wtedy juz bedziesz mial baze w utf-8. Dzieki
>> temu
>> przyszly (obecny) CMS bedzie mogl wprowadzac odpowiednie znaki. Aha, typ
>> polaczenia i kodowanie pol tez musisz zmienic na utf-8
>
> Oj, ale komplikujesz :)
Obaj kombinujecie za mocno.
> mysqldump --set-charset=latin2 > plik-iso.sql
> [... rach-ciach-ciach w jakimś edytorze, polecam pajączka ...]
> mysql --set-charset=utf8 < plik-utf8.sql
Tak to się ciachało jak mysql nie wiedział co to kodowanie znaków. W
wersjach nowożytnych wystarczy ALTER TABLE + SET NAMES.
Regułka do zapamiętania:
*******************************************************************
*** KODOWANIE TABEL/KOLUMN NIGDY NIE JEST WIDZIANE PRZEZ PHP!!! ***
*******************************************************************
Choćbyś miał bazę w EBCDIC z kolumnami w Shift-JIS, to i tak PHP o tym się
nie dowie i tego kodowania nie zobaczy - wszystko od strony PHP zawsze
bedzie widziane w kodowaniu połączenia, bo mysql >=4.1 nie operuje na
bajtach, a zawsze w locie konwertuje kodowanie, w obie strony.
Kodowanie połączenia ustawia się przez set names, np. set names utf8;
Domyślnie jest kompletnie nieprzydatne latin1, więc trzeba to wykonywać za
każdym połączeniem (i przy wczytywaniu dumpów) albo zmienić domyślne w
my.cnf.
--
http://sblam.com
this.author = new Geek("porneL");