Forum FAQForum FAQSearchSearch MemberlistMemberlist Forum ignore listForum ignore list RegisterRegister ProfileProfile Log in to check your private messagesLog in to check your private messages Log inLog in
MySQL utf-8 charset problemi

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side
View previous topic :: View next topic  
Author Message
sime
Guest





PostPosted: 28.07.2005 15:04    Post subject: MySQL utf-8 charset problemi Reply with quote

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...
Back to top
sime
Guest





PostPosted: 28.07.2005 15:20    Post subject: Reply with quote

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

Cijeli kôd:
Code:
<?php
    $link = mysqli_connect("localhost", "miniml1_sime", "asdasd", "miniml1_weblog");

    if (!$link)
    {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    mysqli_set_charset($link, "utf8")
?>
Back to top
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 28.07.2005 15:25    Post subject: Add user to your forum ignore list Reply with quote

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
Back to top
View user's profile Send private message Visit poster's website Twitter profile
sime
Guest





PostPosted: 28.07.2005 15:26    Post subject: Reply with quote

Izgleda da mysqli_set_charset nije još izašla, tek u PHP 5.1 valjda, koji su onda qrac to stavili u manual...
Back to top
sime
Guest





PostPosted: 28.07.2005 15:34    Post subject: Reply with quote

zytzagoo wrote:
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...

zytzagoo wrote:
Sretno :)


Hvala :)
Back to top
sime
Guest





PostPosted: 28.07.2005 15:36    Post subject: Reply with quote

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 :)
Back to top
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 28.07.2005 15:38    Post subject: Add user to your forum ignore list Reply with quote

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):

Ujedno je i odgovor na to kako pozvati SET NAMES Smile

Code:
$mysqli->query("SET NAMES utf8");
Back to top
View user's profile Send private message Visit poster's website Twitter profile
sime
Guest





PostPosted: 28.07.2005 15:39    Post subject: Reply with quote

zytzagoo wrote:

probaj nakon spajanja na bazu postaviti connection charset na utf-8:
Code:
SET NAMES utf8



Aaa, misliš u SQL kôdu? To sam napravia valjda, ali sa drugom naredbom (CHARACTER SET utf8)... Ne znam, ako si to mislio.
Back to top
sime
Guest





PostPosted: 28.07.2005 15:42    Post subject: Reply with quote

zytzagoo wrote:
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.


Sve živo je na utf-8.
Back to top
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 28.07.2005 15:55    Post subject: Add user to your forum ignore list Reply with quote

miniml wrote:
Aaa, misliš u SQL kôdu? To sam napravia valjda, ali sa drugom naredbom (CHARACTER SET utf8)... Ne znam, ako si to mislio.


Pročitaj ovo: http://dev.mysql.com/doc/mysql/en/charset-connection.html
Izvadak:
Quote:
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 Smile
Back to top
View user's profile Send private message Visit poster's website Twitter profile
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 28.07.2005 16:01    Post subject: Add user to your forum ignore list Reply with quote

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 :)
Back to top
View user's profile Send private message Visit poster's website Twitter profile
sime
Guest





PostPosted: 28.07.2005 16:23    Post subject: Reply with quote

zytzagoo wrote:

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?
Back to top
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 28.07.2005 16:43    Post subject: Add user to your forum ignore list Reply with quote

miniml wrote:
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?

Spaja se kao i na mysql, pogledaj postgres funkcije u php manualu..

Sa hosterima ne znam - probaj googleat, al ne bi trebao biti problem neki veci...

phpMyAdmin mislim da ima lib za spajanje i administraciju postgresa, ali nisam ziher, pogledaj na phpmyadmin siteu...

No, postgres je u principu kompletnija i mocnija baza od mysqla, i u tvom slucaju svakako overhead, buduci da se radi o blogging softwareu...

Kompatibilnost i ostalo, evo ti dva dobra stiva:
Comparison of different SQL implementations - http://troels.arvin.dk/db/rdbms/ - obavezno
MySQL compared with PostgreSQL - http://www.sitepoint.com/blog-post-view.php?id=259681 - koliko je realno ovo, ne znam, morao bi sam istestirati, a nije mi na kraj pameti trenutno Smile
Back to top
View user's profile Send private message Visit poster's website Twitter profile
sime
Guest





PostPosted: 28.07.2005 16:55    Post subject: Reply with quote

OK, hvala na svoj pomoći.

Odlučio sam sljedeće: MySQL, MyISAM, latin1 & PHP5 sa mysqli ekstenzijom. That should do it :)

Hoster će ubrzo stavit PHP5, dakle, imat ću sve navedeno, osim Apachea 2, ali to mi ne smeta.
Back to top
gog



Joined: 18 Jun 2004
Posts: 679
Location: zagreb

PostPosted: 29.07.2005 10:36    Post subject: Add user to your forum ignore list Reply with quote

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'");
Back to top
View user's profile Send private message Visit poster's website
sime
Guest





PostPosted: 29.07.2005 10:46    Post subject: Reply with quote

A tako znači se postavlja set names, super, probat ću pa javim, nadam se da radi...
Back to top
sime
Guest





PostPosted: 29.07.2005 11:00    Post subject: Reply with quote

OMG! Radi! Hvala.

Samo sam modificirao da radi sa mysqli i PHP5:
Code:
mysqli_query($link, 'SET NAMES "utf8"');
Back to top
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2005 phpBB Group