[ sojic @ 17.03.2009. 20:58 ] @
Mysql baza popunjena sa cp1251 enkoding zbog toga sto se popunjuje u delphi.

Podatke trebaju da idu na WEB, utf8 enkoding.

Kako da uradim konverziju?
[ bogdan.kecman @ 17.03.2009. 22:33 ] @
koja je verzija mysql-a?
koji je tip podataka u tabeli?

ako je MySQL Server 5.0 ili 5.1 i ako si pravilno napravio to iz starta onda je vrlo jednostavno ... konektuj se sa web-a koristeci utf8 i mysql ce sam da ti izkonvertuje podatke u utf8 ...

da pojasnim, ako ti je polje u tabeli napravljeno da koristi enkoding koji ume da snimi cp1251 (utf8 ili cp1251) i ti si pravilno unosio podatke (dakle pri konekciji na bazu si pravilno setovao client encoding na cp1251, sve sto sada treba da uradis je da se na bazu konektujes sa utf8 enkodingom (za php to znaci da posle konekcije uradis mysql_query('set names utf8');) i mysql ce sam odraditi konverziju podataka te tebi dati podatke formatirane kao utf8...

to je cela poenta podrske za karakter setove ... postoje 2 razlicite "informacije"

1. format polja (enkoding koji se koristi da se polje sacuva)
2. encoding klijenta (u kom formatu klijent prima/salje podatke)

dakle, ako je polje npr latin1, a klijent salje utf8 karakter Ć (2 bajta), kako je u latin1 nemoguce snimiti doticni karakter, mysql ce snimiti ? (Standardni znak za "ne valja karakter"). Ako je latin2 tip polja a klijent salje utf8 isti taj karakter, mysql ce ga snimiti kako treba (1 bajt) posto je taj karakter deo latin2 karakter set-a... (valjda je .. nisam siguran al recimo da jeste)... ako sada mi sa cp1520 citamo podatke, mysql ce taj karakter poslati klijentu u tom karakter setu (1 bajt), isto kao i da sa citas sa utf8, poslace taj karakter kako treba (ovaj put 2 bajta) ....

dakle, bitno je
1. da kazes mysql-u koji encoding koristi tvoj klijent da bi mysql znao sta mu saljes. To se u php-u radi sa "set names" a u vecini ostalih konektora imas poseban property koji treba da setujes (za java konektor na primer u uri ide charset=, za .net ima property etc etc)
2. da polje bude tipa koji moze da sacuva karakter koji zelis sacuvati (ne mozes da cuvas cirilicu u latin1 polju)

nadam se da ti ovo pomaze ... ako si pak lose krenuo, pa ti je polje latin1 a podatke si slao bez postavljenog karakter seta pa je mysql eventualno koristio to kao binarno polje, postoji mogucnost da se podaci u tabeli "poprave"
[ Shinhan @ 18.03.2009. 07:22 ] @
Heh, mysqlperformanceblog.com juče baš postavio članak o konverziji karakter setova.

Inače, kad smo mi kod nas radili konverziju cele baze u UTF8, mi smo to radili sa dump/change/restore. Puno posla.

Nego ne shvatam kakve veze imaju Delphi i cp1251. Nije valjda da pokušavaš da mi kažeš da u Delphiju ne može da se setuje encoding?
[ cveticmilan @ 18.03.2009. 09:04 ] @
A kojom komandom ili skriptom bi promenio kompletan encoding iz cp1251 u UTF-8 u svim tabelama/poljima na celoj bazi ? Nisam bas najbolji sa MYSQL-om
[ bogdan.kecman @ 18.03.2009. 20:40 ] @
Citat:
cveticmilan: A kojom komandom ili skriptom bi promenio kompletan encoding iz cp1251 u UTF-8 u svim tabelama/poljima na celoj bazi ? Nisam bas najbolji sa MYSQL-om


ne postoji tako nesto sto ce "sva" polja iz cp1251 prebaciti u utf8 .. mora polje po polje

ako je na primer polje u enkodingu cp1251 a hoces da mu promenis encoding u utf8 koristi alter table .. problem je, moras polje po polje, promeni mu encoding i mysql ce sam prekonvertovati sadrzaj
[ cveticmilan @ 18.03.2009. 23:30 ] @
O.K , toliko znam i ja i do sad sam i radio to rucno. Konkretno se radi o instalaciji joomla preko cpanel-a na sezamovim serverima kad ne ides manual nego auto on sve baci u latin1_swedish_ci a meni treba utf-8 i onda idem peske. Uzas , ipak hvala na odgovoru
[ bogdan.kecman @ 19.03.2009. 01:53 ] @
slican problem na mnogim provajderima sa tim "auto" / "one click" / "easy app" i ostalim sistemima tog tipa ... ako vec pravis to "nekoliko puta" napisi skriptu koje setuje za potrebna polja utf8 i onda kad pravis "novu" joomla instalaciju - a ti samo pustis skriptu (meni bas danas palo napamet da to odradim za wordpress posto sam 7mi ili 8mi put menjao latin1 u utf8 ...
[ cveticmilan @ 19.03.2009. 08:55 ] @
pa druze ako me nisi razumeo za tu scriptu sam te i pitao .... Kao bi ona trebala da izgleda i sta da radi ? Ako te mrzi daj mi samo pseudo
[ bogdan.kecman @ 19.03.2009. 09:27 ] @
Citat:
cveticmilan: pa druze ako me nisi razumeo za tu scriptu sam te i pitao .... Kao bi ona trebala da izgleda i sta da radi ? Ako te mrzi daj mi samo pseudo


http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

nismo se razumeli .. kada sam rekao skriptu mislio sam na:

Code:

ALTER TABLE `wp_comments` CHANGE `comment_content` `comment_content` text CHARACTER SET utf8 COLLATE utf8_slovenian_ci;
ALTER TABLE `wp_links` CHANGE `link_name` `link_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_slovenian_ci;
ALTER TABLE `wp_posts` CHANGE `post_content` `post_content` longtext CHARACTER SET utf8 COLLATE utf8_slovenian_ci;
...
...
...


dakle, kako sam u zadnjih 5 dana instalirao 6 wordpresova, na svakom sam isao rucno i menjao "bitna" polaj u utf8 ... skripta bi samo zamenila to sto sam kucao rukom u "copy paste" .. nije nista "inteligentno"