Autor Zpráva
Prefin
Profil
Ahojda všichni.
Chtěl bych se zeptat zda a do jaké míry může ovlivňovat předávání dat mezi webem a MySql její nastavení proměnných:
character set client    utf8    
(Globální hodnota)     latin1    
 character set connection    utf8    
(Globální hodnota)     latin1    
 character set database    latin1    
 character set filesystem    binary    
 character set results    utf8    
(Globální hodnota)     latin1    
 character set server    latin1    
 character set system    utf8    
 collation connection    utf8_general_ci    
(Globální hodnota)     latin1_swedish_ci    
 collation database     latin1_swedish_ci    
 collation server         latin1_swedish_ci
Většina těhle řádků je barevně zvýrazněna o čemž jsem se dočetl myslím někde na www.phpbb.cz že znamená chybné nastavení což mi přijde logické.
Pma je asi na takové nastavení v defaultu náchyný, protože jsem to viděl snad na každém hostingu včetně localhostu.
Je možnost jak to změnit? Nenašel jsem nikde možnost jak to udělat (možná v konfiguráku?).
Do jaké míry to může ovlivňovat komunikaci s webem? Četl jsem také, že pro tohle je podstatné v podstatě kódování nejnižšího prvku - sloupce.
V mém případě na www.hexageek.cz mám dvojkové phpbb, které je na utf-8, db - databáze+tabulka+všechny textové sloupce utf8_czech_ci.
Když nepoužiji
@mysql_query("SET NAMES utf8");
tak jsou znaky rozhozené - znamená to že jsou znaky, uložené v db v jiném kódování než utf (cp1250/iso)?
Dají se nějak spolehlivě zdetekovat použité znakové sady dat v db i v případě kratších řetězců?
peta
Profil
data -> sloupec ->  connection server / SET NAMES -> php
Pri vytvareni sloupce se u nej nastavi kodovani podle kodovani tabulky nebo tvoje zvolene.
Pri vytvareni tabulky se u ni nastavi kodovani podle kodovani databaze nebo tvoje zvolene.
Pri vytvareni databaze se u ni nastavi kodovani podle serveru nebo tvoje zvolene.
Pro konvezi kodovani pri spojeni se pouzije default kodovani pro connection nebo tvoje vlastni v SET NAMES.
A to je cele to kouzlo.

SET NAMES nastavi konvertovani na utf8.
sql dotaz vytahne data z databaze, pouzije pouzije kodovani sloupcu tabulky. Vysledek pak prekonvertuje na do utf8.
a) Pokud mas loupec nastaveny na colation latin2 a data v nem ulozena v kodovani latin2, pak se vytahnou v latin2 a pak zkonvertuji na utf8 podle setnames.
b) Pokud mas soupec nastaveny na colation latin2 a data v nem ulozena v kodovani win1250, pak data vytahnou, ale jsou povazovana za latin2 a ne win1250 a pak jsou chybne prekodovana z latin2 na utf (set names ti tam zmrsi diakritiku).
data win1250 -> sloupec latin2 -> setnames utf  -> html utf - chybne
b 2) Pokud pouzijes setnames pro latin2, tak se data vytahnou spravne bez zmrseni, ale vysledne kodovani bude win1250, protoze v tomhle kodovani jsou ulozena, takze html stranka by mela mit php header a meta tag na win-1250.
data win1250 -> sloupec latin2 -> setnames latin2 -> html win1250 spravne, html latin2 chybne
Kajman
Profil
Prefin:
Když nepoužiji SET NAMES utf8 tak jsou znaky rozhozené - znamená to že jsou znaky, uložené v db v jiném kódování než utf (cp1250/iso)?

Když nepoužite set names, použite se nastavení connection serveru - tedy latin1. Server si tedy bude myslet, že data dáváte a chcete v latin1, proto vždy provede konverzi mezi latin1 a znakovou sadou použitou pro daný sloupeček. Pokud však je web v utf-8, přenastavte si právě přes uvedené set names utf8 správné kódování.
Prefin
Profil
Díky, to je vyčerpávající.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: