Posted: 28.07.2005 15:04 Post subject: MySQL utf-8 charset problemi
Ovako, lokalno imam instaliran apache 2.0.54, php 5.0.4, mysql 4.1.13, phpMyadmin 2.6.3-pl1 i sve radi super i u harmoniji. MySQL ekstenzija za php5 je mysqli.
Sve živo radi. Jedino imam jedan problem:
Želim da mi i u bazi tekst bude u utf-8 encodingu te imam:
MySQL Charset: UTF-8 Unicode (utf8)
MySQL connection collation: utf8_general_ci
CREATE TABLE `author` (
`id` tinyint(4) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=InnoDB CHARACTER SET utf8;
CREATE TABLE `post` (
`id` int(4) NOT NULL auto_increment,
`id_uri` varchar(255) NOT NULL default '',
`author_id` tinyint(4) NOT NULL default '0',
`slug` varchar(30) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`summary` text NOT NULL,
`content` text NOT NULL,
`published` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `uri_id` (`id_uri`),
) TYPE=InnoDB CHARACTER SET utf8;
Blog mi je cili u utf-8, input, output... I sad kad napišem post i spremim ga, on sejva upitnike i smeće od hr znakova. A kad je onaj defaultni charachter set u mysql-u (onaj latin1_swedish_ci) onda je sve ok... wtf? Ima ko kakvu ideju, tražia sam google...
Evo došao sam do ovog iz php manuala, kad se spaja na bazu:
mysqli_set_charset($link, "utf8") ali mi izbaci:
Fatal error: Call to undefined function mysqli_set_charset() in D:\Sime\projects\Coastal Disturbance\inc\db.php on line 10
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
Posted: 28.07.2005 15:25 Post subject:
hmmm... to sa mysqlom i utf-8 je dosta tricky i bugovito (barem po mojim iskustvima, pogotovo sa sortiranjima i fulltext searchevima)...
probaj nakon spajanja na bazu postaviti connection charset na utf-8:
Code:
SET NAMES utf8
Takodjer, ponekad je bitno i da je cijela baza u utf-8, znaci kad radis CREATE DATABASE, da ju napravi kao utf8
Probaj podignuti mysql administrator tool ( http://dev.mysql.com/downloads/administrator/1.0.html ) i kad ga pokrenes, u lijevoj stablastoj strukturi odaberi Health, onda desno pod tabovima odaberi system variables i u SQL grupi pogledaj pod charsets kaj imas definirano.
character_set_client character_set_connection, character_set_results, character_set_system bi svi trebali biti na utf8
collation_connection ti je vec dobro postavljen, collation_database i collation_server probaj isto na utf8 postaviti mozda... Probaj changeati i jos pokoju od tih varijabli - sve bi se one trebale podesavati i dodavati u my.cnf fileu... I svaka promjena zahtjeva restart servera :)
Naravno, backupiraj originalnu bazu prije svih promjena.
BTW, pod "input, output" se nadam da si mislio na headere koje saljes iz php-a i/ili meta elemente koji bi svi trebali slati utf-8 headere browseru - provjeri za svaki slucaj da ti apache ne vraca po defaultu iso-8859-1, pa zato dobijes zbrcke iz browsera... Pogotovo u firefoxu, on ignorira info u meta elementu (ponekad) ako mu apache vrati drugaciji content-type i charset header od onog koji pise u html-u...
Sretno :)
Last edited by zytzagoo on 28.07.2005 15:27; edited 1 time in total
probaj nakon spajanja na bazu postaviti connection charset na utf-8:
Code:
SET NAMES utf8
Probat ću, ali nemam pojma kako :)
zytzagoo wrote:
Takodjer, ponekad je bitno i da je cijela baza u utf-8, znaci kad radis CREATE DATABASE, da ju napravi kao utf8
Probat ću i to.
zytzagoo wrote:
Probaj podignuti mysql administrator tool...
character_set_client character_set_connection, character_set_results, character_set_system bi svi trebali biti na utf8
collation_connection ti je vec dobro postavljen, collation_database i collation_server probaj isto na utf8 postaviti mozda... Probaj changeati i jos pokoju od tih varijabli - sve bi se one trebale podesavati i dodavati u my.cnf fileu... I svaka promjena zahtjeva restart servera :)
Da, ali i da uspije, ko će mi to sve podesiti na online serveru, oni svi imaju default kitove instalirane...
zytzagoo wrote:
BTW, pod "input, output" se nadam da si mislio na headere koje saljes iz php-a i/ili meta elemente koji bi svi trebali slati utf-8 headere browseru - provjeri za svaki slucaj da ti apache ne vraca po defaultu iso-8859-1, pa zato dobijes zbrcke iz browsera... Pogotovo u firefoxu, on ignorira info u meta elementu (ponekad) ako mu apache vrati drugaciji content-type i charset header od onog koji pise u html-u...
Ma kakvi, headeri su ok, postavljeni sa strane php-a i apachea kao default, utf-8, ja niti ne koristim meta tagove...
BTW, u gornjem isječku kôda za spajanje na bazu sam bia posta šifru koju inače koristim svugdje pa ako je ko vidija slučajno neka javi pa da počmem mijenjati :) Mada sam editira za kojih par sekundi, svejedno, nikad se ne zna :)
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
Posted: 28.07.2005 15:38 Post subject:
Ovo za set charset koji ne postoji mozes probat workaround-at tako da napravis nakon spajanja (pod uvjetom da cijelo vrijeme koristis istu vezu na bazu, inace nakon svakog spajanja ili prije svakog querya, jer se resetira na default prilikom spajanja, ili jos bolje promijeni drito na mysql serveru, jer ionako ti je sve lokalno koliko kuzim):
Probaj podignuti mysql administrator tool ( http://dev.mysql.com/downloads/administrator/1.0.html ) i kad ga pokrenes, u lijevoj stablastoj strukturi odaberi Health, onda desno pod tabovima odaberi system variables i u SQL grupi pogledaj pod charsets kaj imas definirano.
A SET NAMES 'x' statement is equivalent to these three statements:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
BTW, imas neki poseban razlog za InnoDB tip tablica? Jer iz ddl-a koji si postao se ne vide foreign key constrainti i sl. stvari koje bi opravdale potrebu za InnoDB-om...
Probaj probe radi prebaciti u MyISAM, mozda proradi
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
Posted: 28.07.2005 16:01 Post subject:
miniml wrote:
Da, ali i da uspije, ko će mi to sve podesiti na online serveru, oni svi imaju default kitove instalirane...
Nazalost, situacija sa mysqlom i utf-om je daleko od idealne...
Ako ti "radi" tako da je baza na latin1 ("radi" pod navodnicima, jer sortiranja i sl. stvari nece bas raditi kako spada sa hrv. znakovima recimo ako je latin1 u bazi, a unutra se nalaze multibyte hrv. znakovi) - bojim se da si mozda jos neko vrijeme osudjen na tu latin1 varijantu.
Ili mozes probati instalirati postgres koji "navodno" ima full utf support i sve radi kao po spagi ("navodno", jer nisam samostalno isprobao, samo procitao i cuo sa nekoliko strana)
miniml wrote:
Ma kakvi, headeri su ok, postavljeni sa strane php-a i apachea kao default, utf-8, ja niti ne koristim meta tagove...
Inspectaj to za svaki slucaj pregledavajuci headere koji idu... A i nista te ne kosta probati ih dodati u meta elemente, mozda to pomogne browseru da napravi pravilnu konverziju prilikom POSTa, nikad se ne zna :)
Ako ti "radi" tako da je baza na latin1 ("radi" pod navodnicima, jer sortiranja i sl. stvari nece bas raditi kako spada sa hrv. znakovima recimo ako je latin1 u bazi, a unutra se nalaze multibyte hrv. znakovi) - bojim se da si mozda jos neko vrijeme osudjen na tu latin1 varijantu.
Da, radi kad je latin1, onda su u bazi znakovi spremljeni kao multibyte, i sve radi. Ali tia sam ovako da bude još pravilnije i da mogu editirat čak i raw data sa phpmyadminom...
BTW, nemam nikakve potrebe za InnoDB, negdi sam bia pročita da je bolje pa sam proba lokalno, vratit ću ja MyISAM nazad.
U vezi headera, provjereni su, 100% ispravni, nema šanse da to probavam :) Neće meta tagovi u moje dokumente :)
Za PostgreSQP, kako se spaja na njega, jel to kompatibilno sa MySQL-om, kakva situacija sa hosterima, jer radi phpmyAdmin sa tim, jel ovo, ono itd?
Ja koristim set names sa php4 i sve radi, samo treba poslati odmah nakon otvaranja konekcije na bazu, npr.
Code:
$db=mysql_connect ($dbhost, $dbusername, $dbpassword) or die ('<strong>Ne mogu se spojiti na bazu zbog:</strong> ' . mysql_error());
mysql_query("SET NAMES 'utf8'");
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum