Malo o phpMyAdmin

treba da promijenim collation/char-set kompletne baze podataka sa latin1_swedish_ci na utf8_general_ci. iako nisam nki veliki ljubitelj phpMyAdmin-a, izgleda da se pomocu njega najlakse mogu prebaciti tabele sa jendog na drugi char-set?

  1. imal’ neko nekakvo iskustvo sa ovim?
  2. imal’ mozda neko neku ideju kako lakse promijeniti char-set cijele baze?

baj d ti ga vej, ako sam dobro skont’o, utf8_unicode_ci bolje sortira slova sa akcentima ali utf8_general_ci je brzi. imal’ jos kakve razlike?

gledam u http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html.
izgleda da to i nije bas tako lagan posao k’o sto sam mislio?!?

ili je phpMyAdmin to dobro odradio

Prvo uradi backup baze (ovo naravno goes without saying) pa u Operations tabu (prvo klikni na bazu, pojavi se lista svih tabela) promijeni collation. Sto se tice nekih problema nema bolje reference od MySQL manuala. Usput, gledam u phpMyAdminu nisam vidio opciju da promijenis character set ali vidim da ima za collation.

Takodjer pogledaj ovo: http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html

EDIT: Koliko je to težak posao ovisi od podataka koje imaš u bazi. Recimo ako imaš slovo š snimljeno u latin1 pri konverziji u utf8 to slovo se nepovratno gubi. Jedno rješenje je da napišeš skriptu koja izvadi sve iz baze, red po red, kolonu po kolonu prepravi stringove u novi character set pa vratiš u bazu. Ovo i nije neki pretjerano velik zahvat ali je ponekad poteško za izvesti ga. Moja preporuka je da radiš encoding karaktera (š postane š) no ovo zna stvarati ponekad probleme kada radis pretragu baze sa LIKE ‘%string%’ (mada je i tu jednostavno rjesenje da i taj string enkodiraš).

Ako nisi siguran kako oko ove skripte, koraci su ti ukratko:

  1. Napravi još jednu bazu sa istom strukturom i pravilnim character setom + collation
  2. SHOW TABLES da dohvatiš listu svih tabela pa za svaku
  3. DESCRIBE table_name da dohvatiš listu kolona
  4. SELECT * FROM table_name da dohvatiš red po red
  5. U ovom koraku prođeš kroz svaki red tabele i radiš konverziju (ako je php u pitanju to možeš sa iconv())
  6. INSERT INTO table_name SET polje1=‘pravilno enkodirana vrijednost’, …

Eto, ako treba pomoći urlaj, nekad ranije smo ja i vedran radili na ovakvoj jednoj skriptici za wiki mada nemam pojma gdje je ona završila.

[quote=adioe3]Ako nisi siguran kako oko ove skripte, koraci su ti ukratko:

  1. Napravi još jednu bazu sa istom strukturom i pravilnim character setom + collation
  2. SHOW TABLES da dohvatiš listu svih tabela pa za svaku
  3. DESCRIBE table_name da dohvatiš listu kolona
  4. SELECT * FROM table_name da dohvatiš red po red
  5. U ovom koraku prođeš kroz svaki red tabele i radiš konverziju (ako je php u pitanju to možeš sa iconv())
  6. INSERT INTO table_name SET polje1=‘pravilno enkodirana vrijednost’, …

Eto, ako treba pomoći urlaj, nekad ranije smo ja i vedran radili na ovakvoj jednoj skriptici za wiki mada nemam pojma gdje je ona završila.[/quote]
mislio sam da je ovo “posljednja” opcija, ali kad bolje razmislim i najbolja opcija. uzima malo vise vremena ali, pretpostavljam, da je greska najmanja…
:slight_smile: