[ Sauron @ 10.08.2006. 20:49 ] @
| Baza na mom sajtu je veličine oko 1GB.
Kodni raspored je isti kao i pre 6 godina, znači windows-1250.
E sad, želja mi je da celokupnu bazu konvertujem u utf-8.
Znam za varijante exportovanja cele baze i konverzije u editoru.
Ali to je "malo" nemoguće sa ovolikom bazom.
Da li postoji neko lakše rešenje?
Forum mi je phpBB, a baza MySQL. Imam root pristup serveru. |
[ Not now, John! @ 10.08.2006. 21:36 ] @
Koju verziju MySQL imaš? Trebalo bi da sa novijom MySQL bazom i MySQLi ekstenzijama ne moraš raditi nikakvu konverziju, pošto će to MySQL da odradi automatski prilikom slanja rezultata upita (pod uslovom da su tabele definisane u odgovarajućem kodnom rasporedu).
[ Sauron @ 10.08.2006. 21:47 ] @
MySQL - 4.1.19-standard
[Ovu poruku je menjao Sauron dana 10.08.2006. u 23:06 GMT+1]
[ Not now, John! @ 10.08.2006. 22:12 ] @
Pogledaj linkove:
http://dev.mysql.com/doc/refman/4.1/en/charset-connection.html
http://dev.mysql.com/doc/refman/4.1/en/alter-database.html
Uostalom, nisi rekao kakve imaš probleme. Da li si prebacio phpBB na UTF-8, pa poruke nisu dobro prikazane? Trebalo bi phpBB da radi konverziju, valjda.
[ Sauron @ 10.08.2006. 22:22 ] @
Za sada nemam nikakve probleme, jer nisam ni počeo konverziju :)
Hoću prvo da se dobro informišem, pre nego što počnem išta da radim.
Neću da se negde zaglavim, pa da mi sajt ne radi :)
Bacam se sada na izučavanje ovih linkova što si mi dao.
[ Gojko Vujovic @ 11.08.2006. 00:24 ] @
1. dump baze, pa se igraj u lokalu; ne radi na živo ništa
2. ja sam odradio na ES-u ovako: dumpovao sve sa mysqldump, konvertovao u utf8 taj dumpovani sadržaj, promenio skripte da šalju utf8 charset za svaku stranicu i onda importovao nazad sadržaj baze iz konvertovanog dump fajla
To je na mysql 4.0 ili starijima koji nemaju podršku za utf8 na nivou tabele, jednostavno drže dvojbajtne karaktere u bazi nezavisno od charseta koji si izabrao a na tebi je da prikažeš to kako treba u aplikaciji.
Stvar izgleda malčice drugačija sa noviji mysqlovima u smislu da moraš da pročitaš dokumentaciju koja objašnjava proces migracije sa 4.0 na 4.1 pa sa 4.1 na sledeći, pošto je tu bilo nekih krupnih promena.
[ Sauron @ 11.08.2006. 12:18 ] @
Pošto mi je server u americi... Radio bi direkt sve na serveru.
Koji linux program/skriptu mi preporučuješ za konverziju?
I da li si u dumpovanom sadržaju morao menjati i charset?
Kod mene trenutno stoji ovako:
Code: CREATE TABLE IF NOT EXISTS `phpbb_forums` (
`forum_id` smallint(5) unsigned NOT NULL default '0',
`cat_id` mediumint(8) unsigned NOT NULL default '0',
`forum_name` varchar(150) character set latin1 default NULL,
`forum_desc` text character set latin1,
...
ENGINE=MyISAM DEFAULT CHARSET=latin1;
Da li da jednostavno zamenim sve latin1 za utf8?
[ Not now, John! @ 11.08.2006. 13:10 ] @
Citat: Sauron: Da li da jednostavno zamenim sve latin1 za utf8?
To treba da uradiš tek nakon korištenja iconv programa:
iconv -f latin1 -t utf8 baza.sql > nova_baza.sql
[ Sauron @ 11.08.2006. 16:49 ] @
Hjuston, ve hev a problem :)
Kao probu uradio sam konverziju na manjem forumu.
Išao sam mysql dump. Onda iconv. Editovao sam fajl. Zamenio sam svuda umesto latin1 utf8.
Exportovao u novu bazu (da staru ne sjebem)
Sve je lepo prošlo, samo što umesto č imam è, i umesto ć æ. Ostala naša slova se vide dobro.
Probao sam naknadno da editujem dump na serveru, ali editor u mc-u ne vidi dobro naša slova, kao ni ostali editori.
Šta predlažete?
Mogao bi skinuti dump na windows i editovati tamo, ali za veći forum gde će dump biti od 1gb, to baš ne bi mogao uraditi.
[ Not now, John! @ 11.08.2006. 17:30 ] @
Nema potrebe. Dao sam ti pogrešnu komandu gledajući u SQL upit koji si stavio. Izvini.
Ako je tekst u bazi u windows-1250 kodnom rasporecu onda koristi:
Code: $ iconv -f WINDOWS-1250 -t UTF8 input.sql > output.sql
Nakon toga izmijeni ono "latin1" u "utf-8" i trebalo bi da bude OK.
[ Sauron @ 11.08.2006. 17:39 ] @
iconv -f WINDOWS-1250 -t UTF8 sf.sql > sf2.sql
iconv: illegal input sequence at position 51675
[ Not now, John! @ 11.08.2006. 17:47 ] @
Damn it! Izgleda da onda nije windows-1250 u pitanju.
Trebalo bi da je iconv ispisao posljednji red u kom je našao nepravilan znak.
Možeš li ovdje ispisati to? Da nije iso-8859-2 (Latin2) kodni raspored u pitanju?
[ Not now, John! @ 11.08.2006. 17:50 ] @
Jeste, u pitanju je Latin2. Sad sam provjerio to č i ć.
Code: ambra@eclipse:~$ iconv -f latin1 -t utf-8 proba.txt
èæ
ambra@eclipse:~$ iconv -f latin2 -t utf-8 proba.txt
čć
[ Sauron @ 11.08.2006. 17:54 ] @
Znači da kucam:
iconv -f latin2 -t UTF8 sf.sql > sf2.sql
?
[ Not now, John! @ 11.08.2006. 17:57 ] @
Da, to bi trebalo da uspije, ako već ispisuje grešku sa windows-1250.
Ako ne uspije, stvarno ne znam šta je u pitanju... :-?
[ Sauron @ 11.08.2006. 18:13 ] @
Sada je još gore. Sad nemam ni ona slova koja sam imao :|
Da nije možda problem sa mysqldumpom?
Čini mi se da je on direktno .sql datoteku prebacio u utf-8.
[ Gojko Vujovic @ 11.08.2006. 18:15 ] @
Okači ovde na forum deo fajla koji je problematičan (sa tim slovom Č) pre i posle konverzije, pa da vidimo da li je sve po utf8 kako treba.
mysqldump je ok, samo kad uradiš dump pogledaj fajl (uradi hexdump makar ili koristi neki editor ili downloaduj deo fajla na svoj kompjuter, ne moraš ceo) i proveri o kom je charsetu reč, ako nisi siguran koji si charset dobio.
[ Sauron @ 11.08.2006. 18:33 ] @
Evo prikačio sam arhivu sa tri fajla.
sf_dump.sql - originalni fajl
sf_latin1_to_utf8.sql - fajl posle konverzije iz latin1 u utf8. Ovde je sve ok osim č i ć
sf_latin2_to_utf8.sql - fajl posle konverzije iz latin2 u utf8. Ovde nema ni jednog našeg slova.
[ Not now, John! @ 11.08.2006. 18:33 ] @
Da li 100% znaš u kom charsetu je tekst u bazi?
Probaj:
Code: $ echo $LANG
Ako je odgovor *.utf8, onda je najvjerovatnije mysql-dump odradio konverziju u utf-8.
Pretpostavljam da ako podesiš LANG varijablu na en_US.iso88591 pomoću
Code: $ export LANG=en_US.iso88591
da tada mysql-dump neće raditi nikakvu konverziju.
[ Sauron @ 11.08.2006. 18:40 ] @
Na forumu je namešten kodni raspored Windows-1250.
Sva slova se uredno vide.
Za tabele stoji latin1_swedish_ci.
A za echo $lang sam dobijao odgovor C
Code:
echo $LANG
C
[ Not now, John! @ 11.08.2006. 18:47 ] @
OK. Mislim da sam riješio.
Pošto je mysql-dump konvertovao u utf8 treba da ga vratiš u prvobitno stanje:
Code: $ iconv -f utf8 -t cp1252 sf_dump.sql > tmp.sql
pa zatim da pravilno uradiš konverziju u utf8:
Code: $ iconv -f cp1250 -t utf8 tmp.sql > konacni.sql
Nakon toga ono "latin1" prepravi u utf-8 i trebalo bi da radi.
[ Sauron @ 11.08.2006. 19:01 ] @
iconv -f utf8 -t cp1252 sf_dump.sql > tmp.sql
iconv: illegal input sequence at position 15625255
:(
A ovo je iz phpmyadmina:
MySQL - 4.1.19-standard
* Protocol version: 10
* Server: Localhost via UNIX socket
* MySQL charset: UTF-8 Unicode (utf8)
Skoro je vršen upgrade na 4.1 verziju. Verovatno je tada namešten default utf-8.
[ Gojko Vujovic @ 11.08.2006. 19:08 ] @
Pogledao sam priloženu arhivu i fajl sf_dump.sql je već u utf8.
Šta se desi kad njega importuješ u bazu i promeniš php skripte da daju browseru utf8 charset? Šta se desi ako isto to urediš ali prethodno staviš da je tip tabela utf8?
Nemam sad 4.1 instalaciju da probam da importujem ovo nekako, ali videću za vikend ako bude vremena da probam i ako ti do tada ne rešiš ovo, naravno.
[ Sauron @ 11.08.2006. 19:11 ] @
Citat: Gojko Vujovic: Pogledao sam priloženu arhivu i fajl sf_dump.sql je već u utf8.
Šta se desi kad njega importuješ u bazu i promeniš php skripte da daju browseru utf8 charset? Šta se desi ako isto to urediš ali prethodno staviš da je tip tabela utf8?
Nemam sad 4.1 instalaciju da probam da importujem ovo nekako, ali videću za vikend ako bude vremena da probam i ako ti do tada ne rešiš ovo, naravno.
Probao sam i to.
Dobijem isto što sam i imao. Naša slova na 1250, smeće na utf-8. To me i zbunjuje.
Probaću malo da se poigram sada sa mysqldump --default-character-set=charset_name
Možda ubodem jednom dobar charset.
[ Not now, John! @ 11.08.2006. 19:20 ] @
Citat: Sauron: iconv -f utf8 -t cp1252 sf_dump.sql > tmp.sql
iconv: illegal input sequence at position 15625255
:(
Hm... na fajlu koji si priložio je kod mene sve prošlo bez problema.
Pogledaj fajl koji prilažem da vidiš da su sva slova čitljiva. Fajl je u utf-8.
Više mi ništa ne pada na pamet.
Možda da probaš da ono "latin1" u SQL fajlu da promijeniš u "cp1250", pa da takav fajl bez konverzije probaš importovati u bazu...
[ Sauron @ 11.08.2006. 19:24 ] @
Citat: Not now, John!: Hm... na fajlu koji si priložio je kod mene sve prošlo bez problema.
Pogledaj fajl koji prilažem da vidiš da su sva slova čitljiva. Fajl je u utf-8.
To je samo deo fajla. Ceo dump je 50mb. Možda greške nastaju kasnije?
[ Not now, John! @ 11.08.2006. 20:04 ] @
Citat: Sauron: To je samo deo fajla. Ceo dump je 50mb. Možda greške nastaju kasnije?
Da, sigurno, ali ne shvatam zašto... Kao da je baza bila u više kodnih rasporeda, npr. jedna tabela je u latin2, druga u cp1250, treća ... što me čudi.
Probaj da dumpuješ samo definicije tabela, bez podataka, pa vidi da li su sve u latin1 kodnom rasporedu.
[ Sauron @ 12.08.2006. 00:06 ] @
Problem je sigurno u bazi.
mysqldump npantos_sf >sf_dump.sql --default-character-set=latin1 (pošto je od verzije 4.1 default utf8)
iconv -f cp1250 -t utf8 sf_dump.sql >konacni.sql
I sve je lepo bilo kada sam odradio samo par tabela.
Ali kada pokušam sve od jednom... to je već problem...
Nazad na izučavanje :)
[ Not now, John! @ 12.08.2006. 00:22 ] @
Citat: Sauron: mysqldump npantos_sf >sf_dump.sql --default-character-set=latin1
Zar ne bi trebalo:
Code: $ mysqldump --default-character-set=latin1 npantos_sf > sf_dump.sql
E... čudi me da ti je to toliko muke zadalo. U principu bi to trebalo da bude jednostavan problem...
Da li možeš zaključiti koji karakter pravi problem, nakon što iconv ispiše poruku o grešci?
[ Sauron @ 12.08.2006. 02:01 ] @
Bez muke nema nauke :)
Pucanje pri konverziji mi je zadavala tabela shoutbox. Ko zna kakvih je tamo sve karaktera bilo...
Ispraznio sam tu tabelu i sve je prošlo.
Baza je lepo konvertovana, i kada iz browsera pogledam dump, vide se sva naša slova na utf-8 enkodingu.
Importujem dump nazad u bazu, ali slova nestaju.
Probao sam i sa
Code: mysql --default-character-set=utf8 --user=xxx --password=xxx imebaze <konacni.sql
ali opet ništa.
Pogledao sam tekstu u samoj bazi pomoću phpmyadmina, i tamo su slova ok.
Ali svuda drugde se slova ne vide.
100% je podešen utf-8 enkoding na forumu.
[Ovu poruku je menjao Sauron dana 12.08.2006. u 04:06 GMT+1]
[ Not now, John! @ 12.08.2006. 10:09 ] @
Da li si u definicijama tabela isptavio ono "CHARSET=latin1" u "CHARSET=utf8".
Ako jesi onda mislim da je jedino objašnjenje da phpBB očekuje podatke u latin1 kodnom rasporedu, pa obavlja konverziju u hodu. Novija verzija phpBB? Postoje li neka podešavanja u phpBB konfiguracionom fajlu koja se tiču kodnog rasporeda?
[ Not now, John! @ 12.08.2006. 11:38 ] @
Malo sam se poigrao phpBB-om.
Ako je verzija MySQL ranije bila 3.x, a sad je 4.x onda u fajlu config.php izmijeni liniju:
Code: $dbms = 'mysql4';
da bude
Code: $dbms = 'mysql4';
Sva ostala podešavanja zavise od kodnog rasporeda prevoda.
Ako si imao više prevoda u različitim kodnim rasporedima, onda je i tekst u tabelama bio u raznim kodnim rasporedima, pa je vjerovatno to pravilo problem sa konverzijom.
Onaj kodni raspored koji je naveden u prevodu je kodni raspored foruma i trebalo bi da je za sve prevode (jezike) isti kodni raspored (utf8) da bi svi vidjeli isti tekst, nezavisno od izabranog jezika. Kod mene je engleski jezik bio iso-8859-1 (latin1), pa sam najprije pomoću iconv prebacio taj fajl u utf8 i izmijenio liniju:
Code: $lang['ENCODING'] = 'iso-8859-1';
u
Code: $lang['ENCODING'] = 'utf-8';
Nakon Refresha, forum je sad bio u utf-8 kodnom rasporedu i mogao sam da unosim Unicode znakove i da ih vidim normalno.
Sad bi trebalo da možeš importovati taj konvertovani fajl u bazu i da možeš vidjeti sve znakove bez problema, ako je utf-8 kodni raspored foruma.
[ Sauron @ 12.08.2006. 13:50 ] @
KONAČNO 
Evo da sumiram kako sam namestio:
Ispraznio sam phpbb_shoutbox jer je tamo bilo karaktera koji su pravili probleme pri iconv konverziji.
Code: mysqldump npantos_sf >sf_dump.sql --default-character-set=latin1
Code: iconv -f cp1250 -t utf8 sf_dump.sql >konacni.sql
Editovao sam konacni.sql, zamenio latin1 za utf8
Sada sam imao problem da se na forumu i dalje ne vidi dobro utf-8, iako je dobro podešen.
editovao my.cnf
dodao:
Code: [mysqld]
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server = utf8
collation-server = utf8_general_ci
[client]
default-character-set=utf8
Restartovao mysql, i tek onda je proradilo.
Proba je uspela, i sad mogu na miru sve baze konvertovati 
Hvala puno Not now Johnu i Gojku na pomoću 
[ Not now, John! @ 12.08.2006. 13:52 ] @
O, hvala bogu. Počeo sam da se brinem. 
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|