[RIJESENO]Konvertiranje database charseta na uft-8

MySQL charset: UTF-8 Unicode (utf8)

#MySQL connection collation: utf8_unicode_ci

PHPmyadmin bio je na latin1_german2_ci
Dok je na website u jeziku bio postavljen na windows-1250.
Na ovoj konfiguraciji radila su nasa slova iako su karakteri bili otprilike ovako: è-> č, ð->đ, ž->ž, æ->ć.
E ako sada izabere na stranici utf-8 ta slova ispadnu kao slikica (crna kockica okrenuta na 90°) sa upitnikom unutra.

Sada u phpmyadmin postavljena su slova na utf-bin, ne znam koliko je to to vazno izmedju utf8_unicode_ci i utf8_general_ci ili utf-bin?
I ako konvertira rucno npr.
è (č) u č
æ (ć) u ć itd…
Prikaz na stranici je uredan, ali u phpmyadmin ostaje na ovim specijalnim slovima, cak i na eksport databaze ostane ovako.

Koju konfiguraciju da izabere u MySQL i PHPmyadmin da bi sve radilo kako treba?
Dali je potrebno konvertiranje fontova npr. æ u ć, a ne u ć ?
Ako se vec konvertira u ć zasto na phpmyadmin prikaze ć a ne ć ?
Hvala na odgovorima :slight_smile:

Prepravio sam malo naslov (nisu fontovi!)

Generalno, preopručena procedura je:

  • Pogodi/saznaj charset baze.
  • Uradi dump baze.
  • Sa iconv prebaci dump u utf-8
  • Prepravi CREATE TABLE stavke da koriste utf-8
  • Prepraviti HTML da koristi utf-8
  • Profit

Malo je teži problem ako je u bazu pisano sa vise razlicitih encodinga, al opet ide sličan pristup, dump, prčkanje po dump datoteci, i vraćanje nazad u bazu.

[quote=adis]Prepravio sam malo naslov (nisu fontovi!)

Generalno, preopručena procedura je:

  • Pogodi/saznaj charset baze.
  • Uradi dump baze.
  • Sa iconv prebaci dump u utf-8
  • Prepravi CREATE TABLE stavke da koriste utf-8
  • Prepraviti HTML da koristi utf-8
  • Profit

Malo je teži problem ako je u bazu pisano sa vise razlicitih encodinga, al opet ide sličan pristup, dump, prčkanje po dump datoteci, i vraćanje nazad u bazu.[/quote]
Generalno u MySQL i Phpmyadmin, koju postavku da koristim za UTF-8:
utf8_unicode_ci , utf8_general_ci ili utf-bin.
Npr. ako bi nekakavu novu stranicu zelio instalirati, a da prikaziva uredno nasa slova u databazi, ili ce ostati na ovim polukineskim.

Miješaš poredak (collation) i kodni raspored (charset). Ispravan colllation ti omogućava da je pri sortiranju imaš korektan poredak za naša slova, npr. a, b, c, č, ć, d, e i sl.

Ne koristim phpMyAdmin, ali generalno, MySQL može imati zaseban charset za čitavu bazu, te svaku tabelu pojedinačno, tako da je svejedno kako kreiraš bazu ako izabereš pravilan charset za tabele:

CREATE TABLE tbl_name ( /* table definition */ ) DEFAULT CHARACTER SET utf8, ENGINE=InnoDB;
Usput, PHP sve do verzije 5.2.3 praktično nije korektno podržavao UTF-8 encoding MySQL baza:
http://www.php.net/manual/en/function.mysql-set-charset.php

Klasična metoda (“SET NAMES ‘utf8’” prije upita) pouzdano radi samo u mysql komandno-linijskom klijentu, a ne iz PHP-a. Clusterf*ck, as usual …

Ovako, kod njega je iznajmljen space, ima phpmyadmin, novi sajt ista prica databaza sa hiroglifama, a uredno prikazana nasa slova na stranici.
Ovo je dio postavke koje sam izvukao iz phpmyadmin:
phpMyAdmin - 2.11.5

* MySQL client version: 5.0.32
* Used PHP extensions: mysql

Server variables and settings
Variable Session value / Global value
auto increment increment 1
auto increment offset 1
automatic sp privileges ON
back log 3
basedir /usr/
binlog cache size 32,768
bulk insert buffer size 8,388,608
character set client utf8
(Global value) latin1
character set connection utf8
(Global value) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Global value) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
(Global value) latin1_german2_ci
collation database latin1_german2_ci
collation server latin1_german2_ci

Mozda zbog ovog latin1 da zeza stvar :frowning:

Hm, na websiteu nasao sam pod php info slijedecu stavku:
iconv
iconv support enabled
iconv implementation glibc
iconv library version 2.3.6

Directive Local Value Master Value
iconv.input_encoding ISO-8859-1 ISO-8859-1
iconv.internal_encoding ISO-8859-1 ISO-8859-1
iconv.output_encoding ISO-8859-1 ISO-8859-1

Znaci i kada posaljem UTF-8 sa sajta on u databazi sacuva kao ISO-8859-1, a kada u databazi stavim nasa slova, on ih reflektuje na sajt kao ISO-8859-1, recite mi ako nije istina :cry:
To bi za mene znacilo da bi na stranici radilo kako treba, a na databazi da bilo kakve izmjene koristis morao bih prekonvertirati utf u ISO-8859-1?

Ne bi da te oneraspolozim, ali ISO-8859-1 (je latin1?) nema nasa slova.

Da uredno prikaze slova na stranici, ali i kada sam konvertujes sa iconv UTF-8 u ISO-8859-1 dobijes hiroglife:Ćć, Đđ, Šš, Žž.
Sada koliki je uticaj ovih hiroglifa na komplet databazu i sam sajt to ne znam, dali moze da radi sa ovim ili da potrazi support od webhostinga?

Nešto ne radiš kako treba sa iconv-om, nije ti odgovarajući ulazni i izlazni charset.

Vidi, imao sam sličan problem. Kada ti je encoding baze latin-1 a ti putem PHP skripte ubacuješ UTF-8, ono što se dešava je da su ti u bazi zapisani pojedini elementi UTF-8 u njihovoj 8-bitnoj reprezentaciji (svako naše slovo je dva hijeroglifa, jer su u UTF-8 predstavljeni kao 16-bitni kodovi). Kada napraviš eksport te baze, on ti zakodira te elemente kao UTF-8 tako da dobiješ hijeroglife od kojih svaki predstavlja UTF-8 reprezentaciju 8-bitne reprezentacije UTF-8 :slight_smile: (četiri hijeroglifa po jednom slovu - to je ono što si pastirao ovdje). Da bi to popravio prvo moraš konvertovati iz UTF-8 u latin-1 (čime ćeš dobiti one prve hijeroglife - dva po jednom našem slovu) a tek onda promijeniti charset u bazi ili u samom SQL dump-u (ako sadrži CREATE TABLE), nakon čega ga možeš importovati u bazu ali ne preko phpmyadmina (jer će ti on automatski konvertovati nazad ovaj UTF-8 u ono drugo smeće).

Ukratko, najlakše rješenje je da otvoriš SQL dump u nekom dobrom editoru i napraviš Replace :slight_smile:

Ne znam ni ja sam Vedrane, stavio sam novu databazu, novi sajt i kao sto gore rekoh, sve je na utf-8, ali izgleda da na webhostingu ima “iconv” koji to lijepo prebaci u u databazi na latin1 ili iso-8859-1. Sajt uredno radi, ali na databazi u phpmyadmin ako zelis editovati ili export ostanu hiroglife. Lijepo bi mu konvertirao sa raplace nasa slova na hiroglife i vratio nazad, ali kao sto rekoh, dali ce imati probleme sa databazom u buducnosti?

Sredjeno, posto je stranica na e107 dodao sam u e107_handlers/mysql_class.php (oznaceno crvenom bojom)
} else {
if (!@mysql_select_db($this->mySQLdefaultdb)) {
return ‘e2’;
} else {
$this->dbError(‘dbConnect/SelectDB’);
}
}
}
[color=#FF0000]@mysql_query(‘SET NAMES utf8’);
@mysql_query(‘SET CHARACTER SET utf8’);[/color]
}

Databazu sam rucno konvertirao slovo po slovo, gedit mi u tome nije previse pomogao jer text od 27 mb tesko otvara, ali notepad++ preko wine-a mi je odradio posao, iconv sam mogao zaboraviti jednostavno nije bio od koristi.
U phpmyadmin databaza postavljena na UTF-8_general_ci, sve odlicno radi, ipak hvala vam na odgovorima.