Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

PHP - Import bazy mysql w kodowaniu ISO-8859-2

COLOBOT - 08-02-2010, 21:07
Temat postu: Import bazy mysql w kodowaniu ISO-8859-2
Będzie krótko, konkretnie i rzeczowo.
Na pewnym serwerze miałem postawione forum i padła mi baza danych. Skrypt forumowy zapisywał codziennie kopie na ftp i jestem w posiadaniu najnowszej kopii. Problem polega na tym, że kopia jest zapisana w kodowaniu ISO-8859-2. Przy każdej próbie importu bazy na nowy serwer zamiast polskich liter pojawiają się znaki zapytania.

I moje pytanie: w jaki sposób/czym przekonwertować tę kopię bazy danych aby była zgodna z jakimkolwiek standardem obsługiwanym przez PHPMyAdmina (mysql3, mysql4, ANSI i parę innych jest do wybory)?

W połowie rozwiązałem ten problem. Baza przy tworzeniu tabel domyślnie korzysta z porównywania napisów "latin1_swedish_ci", a powinna z "utf8_polish_ci". Cholerny skrypt nijak nie chce się przerzucić na to kodowanie. Jak mu to narzucić?

Bartek c++ - 08-02-2010, 21:31

Gdzieś necie lerzy kod HTML kodowujący strone na polski język ale kurde zapomniałem gdzie to jest poszukam czegoś. :-/
Cytat:
wymyśliłem taki myk żeby sprawdzić jakie dokładnie siedzi kodowanie w starej bazie, jakie widzi adodb:

$db = NewADOConnection('######');
ADOdb_Active_Record::SetDataba seAdapter($db);


class Wykonawc extends ADOdb_active_record {}
$tst = new Wykonawc("wykonawc");

$tst->Load("id=1");
$naz_wyk=$tst->naz_wyk;
$kodowanie=mb_detect_encoding( $naz_wyk)
echo($kodowanie);

i pozniej jesli chodzi o przekonwertowanie:

$txt = text z nowej bazy;
echo(iconv(mb_detect_encoding( $txt),$kodowanie,$txt));

to sie tyczy synchronizatora zeby wiedzial co na co przekodowac... moze zadziala;)
to z jakiejś stronki, cytowanie jakiegoś gościa :-)

jeszcz to
http://forum.php.pl/index.php?showtopic=38309

Schocker - 08-02-2010, 22:50

Czyżby PMA nie obsługiwał kodowania ISO-8859-2? Dziwne.. Sprawdzę to jutro.
Osobiście korzystam z utf8-bin na moim lokalnym serwerze i nie ma żadnych problemów. ^^

COLOBOT - 08-02-2010, 23:15

Obsługuje, tyle że przy dodawaniu tabel kodowanie zostaje automatycznie ustawione na szweckie latin, a powinno być polskie utf-8 (chodzi o ostatnią linijkę - w mojej kopii bazy jej nie ma):
Kod:
DROP TABLE IF EXISTS `phpbb_adv_person`;
CREATE TABLE IF NOT EXISTS `phpbb_adv_person` (
  `user_id` mediumint(9) NOT NULL default '0',
  `person_id` mediumint(9) NOT NULL default '0',
  `person_ip` char(8) collate utf8_polish_ci default '',
  PRIMARY KEY  (`user_id`,`person_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


Normalnie nie problem to zmienić, ale tabel jest ponad 70.

PS: Spróbuję coś wykombinować w języku AWK - mam nadzieję, że mi się uda.

adiblol - 09-02-2010, 14:02

Przekonwertuj na UTF8 przy pomocy Notepad++. A tamtą linię możesz dodać bardzo prostym poleceniem zamiany.
COLOBOT - 09-02-2010, 14:40

Konwersja nic nie daje (w ISO-8859-2 też wczytuje poprawnie), tu o chodzi o opcję "porównywanie napisów".

A z tym poleceniem zamiany to jeśli chodzi o opcję "Znajdź/zamień" to nie ma tak prosto, gdyż przeplatane są polecenia CREATE TABLE i INSERT INTO, a w tym drugim nie można dodać tej dodatkowej linijki.

W każdym razie wszystkim dziekuję za zainteresowanie, przynajmniej wiem o co chodzi, więc sobie poradzę.


Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group