Convert mysql to utf8 ... neko rješenje koje radi?

Googlam i čitam svašta…i zbrka mi od rješenja koja uglavnom ne rade. Pa, jel zna netko kako se elegantno može cijela baza postaviti u utf8 ?

Naravno, nakon što već postoje tablice…i vrijednosti unutar njih…

Ovdje sam našao najpozitivnije komentare http://www.bothernomore.com/2008/12/16/character-encoding-hell/ ,
jednostavan kod (mislim kratak, poantu ne kužim najbolje) …ali meni ne radi.

alter table TABLE_NAME modify FIELD_NAME blob;
alter database DATABASE_NAME charset=utf8;
alter table TABLE_NAME modify FIELD_NAME varchar(255) character set utf8;

Stavio sam svoje podatke za table_name, filed_name, database_name…i padam već na prvom queriu. Greška kaže: “error: BLOB/TEXT column ‘ime’ used in key specification without a key length”

Prije nego što kreiraš bazu odi u PhpMyAdmin i postavi:
General Settings-> Server connection collation: utf8_general_ci
Tako je cijela baza postavljena na utf8 i u skriptama ne moraš više ništa
definirati.

Ako su ti svi fileovi aplikacije/stranice (provjeriš sa notepadom) exportani na utf8 i ako font podržava HR znakovlje - mora raditi.

Yep…in this case :smile:

…ali što ako dobiješ bazu koja nije utf8, ili ako nekad prije nisi razmišljao o tome…pa napravio bazu bez utf8.

Znači krenuo sam ovim putem:

Algoritam u koracima:

  1. uzeti sve tablice iz zadane baze
  2. za svaku tablicu, uzeti imena polja i vrste (type) polja.
  3. svaku tablicu convertat u utf8.
  4. za svako polje ako je vrste (text, varchar…) …convertat ga u utf8
  5. za svako to isto polje, odraditi replace znakova: ÄŒ-č-Ć-ć-Ž-ž-Å -Å¡-Đ-Ä ==> Č-č-Ć-ć-Ž-ž-Š-š-Đ-đ’

U suštini svaki korak posebno fino odradi svoje…osim što korak 5 ima neke čudne smicalice.

Kod za taj korak izgleda ovako:

ALTER TABLE table_name modify polje_name polje_type CHARACTER SET utf8 COLLATE utf8_bin;

No, on nekada radi, a nekada ne. Muči ga ovakva greška: “error: Specified key was too long; max key length is 1000 bytes”

Recimo, zapne mi na polju koji je varchar(100), ja kroz phpMyAdmin promjenim to polje u vrachar(50) i onda stvar prošljaka do nekog sljedećeg polja gdje zaglavi s istom greškom.
Ono što me najviše zbunjuje…negdje su polja varchar(200) a da opće nije zapeo na njima…a onda zapne na varchar(100) , hmmm?

Ta koja su (100), ručno sam ih stavio na (50) …i nakon što je algoritam uspio promjeniti charactere u utf8, probam to polje kroz phpMyAdmin vratiti u varchar(100) …i neće! baca mi istu grešku.

O čemu bi se tu moglo raditi?? Any Idea??

U koraku 6. imam ovakav code (za zamjenu znakova):

update $tableName set $poljeName = replace($poljeName, 'Å ', 'Š')

… e sad, veliko slovo Š se pojavljuje u bazi kao "Å " < < taj neki čudni znak, ali još čudniji razmak pored toga znaka :smile:

…ako bi recimo s istom funkcijom replace probao zamjeniti sve razmake, nešto ovakvo:

update $tableName set $poljeName = replace($poljeName, ' ', '___')

…to će stvarno zamjeniti sve razmake, osim onog čudnog koji se nalazi pored znaka “Å”. Ali kad napravim copy paste tog čudnog znaka (uzetog s tim čudnim razmakom) …kod pastanja u editor (notepadd++) taj razmak postane obični, i onda mi željena funkcija neće raditi. Ako izostavim taj razmak, onda kod replacea dobijem slovo Š…ali ostane u bazi razmak pored njega xd.

Any idea??