|
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ę.
|
|