Stránka 1 z 1

PHP, MySql a diakritika

Napsal: 12 dub 2011 09:45
od PreTox
Zdravím všechny, řeším zvláštní problém a nevím, co s tím.
Mám záznamy v DB, kódování pro připojení k MySql je nastaveno na utf8_general_ci, porovnávání tabulky mám nastaveno na utf8_czech_ci, PHP a HTML stránky jsou nastaveny na utf-8 (PSPad).
A teď samotný problém:
V databázi mám uložený adresář kontaktů (cca 6800), ve sloupcích jsou jak číselné hodnoty (např. telefon), tak i textové. Jedná se mi hlavně o sloupeček "Celé jméno", které začíná příjmením a pokračuje jménem. Při seřazení podle sloupce "Celé jméno" v phpmyadmin se záznamy seřadí správně dle abecedy (AÁBCČDĎ... atd), ale jakmile v PHP vyberu záznamy pomocí sql dotazu, a následně je procházím pomocí mysql_fetch_array, tak se záznamy seřadí tak, že veškeré jména, co začínají diakritikou, jsou na konci po Z, ale jsou seřazeny dle posloupnosti v abecedě (ÁČŘŠŤŽ... atd).

Připojení k databázi:

Kód: Vybrat vše

mysql_connect($host, $user, $pwd) or die('CHYBA: Nemohu se spojit s MySQL serverem..');
mysql_select_db($db) or die('CHYBA: Nemohu se spojit s databází!');

mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES 'utf8'");

mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_connection=utf8");
mysql_query("SET character_set_results=utf8");


MySql dotaz:

Kód: Vybrat vše

$sql="SELECT * FROM adresar WHERE ulice LIKE 'Politických%' ORDER BY 'Celé jméno' ASC";


Zpracování v PHP:

Kód: Vybrat vše

$query=mysql_query($sql);

while($ds=mysql_fetch_array($query)) {

// Kod na zobrazeni polozek v tabulce

}


Nevěděl by někdo co s tím? Já už jsem docela zoufalý. :huh:
Díkes

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 11:50
od Luboš
Pomohl by příkaz

mysql_query("SET COLLATE=utf8_czech_ci"); ? - nevím, zda je to syntakticky správně, momentálně mám SQL odinstalované.

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 13:12
od General
Místo těch šílenejch SQL dotazů character set (..) ti stačí:

Kód: Vybrat vše

mysql_set_charset('utf8');

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 13:35
od CZechBoY
mě stačí SET NAMES 'utf8' a pohoda :-)
teď jsem to testnul a š je před u takže máš někde nějakou chybu
sloupec mám s kodováním utf8_czech_ci

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 14:23
od PreTox
Luboš: Bohužel, nepomohlo.
General: To mám jenom teď, zkouším všechny možnosti, jinak mám jenom SET NAMES.
CZechBoY: Zvláštní, takhle to mám i já.

Kód: Vybrat vše

CREATE TABLE `dos`.`test` (
`Osobní číslo` INT( 9 ) NOT NULL ,
`Celé jméno` VARCHAR( 41 ) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL ,
`Adresa` TEXT CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL
);


a stejně to nefunguje, vypíše se to takhle:
► Zobrazit spoiler


Zaráží mě, že při seřazení v phpmyadmin (po kliknutí na název sloupce) se to seřadí v pohodě, ale když použiju sql dotaz, tak to udělá tohle.

Re: PHP, MySql a diakritika  Vyřešeno

Napsal: 12 dub 2011 14:35
od CZechBoY
tak ten SQL hoď do phpMyAdmina, pak zjistíš že to máš asi blbě ;-)
zkus dát `název sloupce`, ale stejně to nepomůže asi
pak zkus dát pryč ten LIKE, uvidíš co to udělá

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 15:05
od PreTox
No to mě ...... Když jsem dal ` místo ', tak to už řadí správně.. :o Vysvětlí to někdo?

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 15:55
od CZechBoY
nevim, já používám apostrofy jen jako uvedení řetězce, ` tyhle šmejdy se většinou používaj na tabulky, případně databáze, dělá to tak phpMyAdmin
jinak nevim jakej je v tom rozdíl

Re: PHP, MySql a diakritika

Napsal: 12 dub 2011 16:53
od PreTox
No, každopádně dík za radu, tohle by mě opravdu nenapadlo. :) Teď už to šlape jak má. ;) Vyřešeno.