MySQL + UTF8 (problemy s diakritikou)
Google sice pomohlo, ale len ciastocne... cize:
Operacny system WinXP, Apache2Triad (phpMyAdmin 2.7.0, MySQL 5.0.18, PHP Version 5.1.2, Apache Server 2.2.4)
Databazka je na localhoste a je enkodovana v UTF8
Stranka (php skripty) maju v hlavicke taktiez
<meta http-equiv="content-type" content="text/html; charset=utf-8">
avsak vysledky dotazov su vracane v latin1 (smiesne znaky namiesto ľščťžýá...)
ine texty (nie vysledky dotazov) su zobrazovane spravne (pochopitelne kedze boli pisane v utf8 a stranka je zobrazovana v utf8)
ak prepnem manualne kodovanie v opere na ISO-8859-1 (tiez zname ako latin1) vysledky dotazov su zobrazovane spravne s diakritikou, avsak ostatne texty uz nie...
mysql_client_encoding() mi vracia taktiez latin1, cize problem je mi jasny - mysql (resp php komunikuje s mysql) v latin1
upravil som teda konektor.php (subor co inkludujem do kazdeho skriptu co potrebuje pristup k databaze) nasledovne
<?php
$sql = @mysql_connect('localhost', '', '');
mysql_query('SET NAMES UTF8');
$sql_db = @mysql_select_db('databazka', $sql);
?>
a vsetko ide - cize - hned je tu aj riesenie v tejto mojej otazke, ale ja som tvrdohlavy a - nezda sa mi to :) preco to mam robit takto "krkolomne"? ja chcem aby moj sql server bezal v utf8!
skontroloval som teda charsety v mojej databazke (mysql servri) a vystup premennych (sql prikaz show variables like "c%" ) je:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir C:\apache2triad\mysql\share\charsets\
collation_connection utf8_slovak_ci
collation_database utf8_general_ci
collation_server latin1_swedish_ci
cize - ma velmi drazdia tie zmienky o latin1... no a toto by som rad zmenil - aby vsade bolo utf8 lebo verim ze to vyriesi moj problem.
Takze - ako sa daju nastavovat tieto premenne v sql? resp - kde je nejaky konfiguracny subor pre mysql (zufalo ho neviem najst)
A ten príkaz si spustil z toho PHP, kde to vracia výsledky v latin1 alebo niekde až po nastavení kódovania pre spojenie (napr. v phpMyAdmin)? Pretože podľa tých premenných by si mal dostať výsledok v kódovaní utf8 a nemal by byť žiaden problém...
Konfigurácia je v adresári, kde si nainštaloval MySQL v súbore my.ini. V mojom prípade je to C:\Program Files\MySQL\MySQL Server 5.0\my.ini
Manuál: http://dev.mysql.com/doc/refman/5.1/en/charset-conn ection.html
problém je možná v Apache - najdi si v jeho konfiguráku (httpd.conf nebo i jiný) AddDefaultCharset (bude tam nejspíš ISO-8859-1), stačí zakomentovat #
Týmto nastavením určí iba predvolené kódovanie stránky, ktorú dostane prehliadač. Apache do komunikácie medzi PHP a MySQL nezasahuje.
dik za tip skusil som zaremovat default charset v httpd.default.conf a httpd.conf ale nepomohlo :(
OK, jen doufám, že jsi po změně konfiguráku restartoval Apache , pak mi to taky nepomáhalo
BTW jsou i jiné balíky ReactorServer, XAMPP... vše grátis
Do tveho problemu presne nevidim, UTF8 pouzivam u XML, ale mam zkusenost ze WindowsXP ve spojeni s nekterymi programy likviduje pri preukladani tenhle format. V linuxu podobne problemy nejsou.
Takze ztezka rici, co to dela tobe.
takto - aby sme to nekomplikovali - ono mi to funguje (ked dam za kazde pripojenie mysql_query('SET NAMES UTF8');)
skor ma teraz zaujima ako zariadit tie premenne v sql aby som natvrdo nastavil na utf8 - resp. odkial sa tam este beru zmienky o latin1, dokonca o latin1 swe?
(jo apache som restartol)
když se podíváš v phpMyAdmin na strukturu tabulky, jsou tam sloupce: sloupec, typ, porovnávání(collate) - jaké máš tady kódování? swe - to by byla chybka v MySQL(švédská firmička) používá právě tohle jako výchozí kódování změň to na utf8_slovak_ci odjinud swe neznám...
Ano aj tam je slovak utf8 - v phpmyadminovi som nastavil utf (utf8 slovak) vsade kde sa dalo...
proste mi je zahadou kde sa nastavuju tie premenne hm...
V souboru s daty pro připojení do databáze mám řádek mysql_query("SET CHARACTER SET utf8") bez toho to nefunguje ani mně a to mám taky samý utf8 Prostě bez toho to asi nejde